2009-01-14 24 views
4

如何生成装配限定类型名称?我如何检索程序集的限定类型名称?

例如,在配置成员资格提供程序时,我必须在“type”属性中为“SqlMembershipProvider”(在本例中,我从某处复制了以下配置)提供程序集限定类型名称。

如何生成装配限定类型名称? 是否必须通过检查装配类型每次手动键入?

<membership> 
    <providers> 
    <clear /> 
    <add name="AspNetSqlMembershipProvider" 
      type="System.Web.Security.SqlMembershipProvider, 
      System.Web, Version=2.0.0.0, 
      Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" 
      connectionStringName="LocalSqlServer"/> 
    </providers> 
</membership> 

[UPDATE]Simpler PowerShell version

PS>([System.String]).AssemblyQualifiedName 
System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
+0

这是一个集限定名称;完全限定名称只是“System.Web.Security.SqlMembershipProvider”;重新命名(但左身完好无损) – 2009-01-14 07:40:08

+0

谢谢Marc的正确任期。 – Sung 2009-01-14 16:20:46

回答

7

这是一个很好的handy tool(外壳扩展与源代码),复制完全限定名称通过右键单击任何程序集剪贴板。

更新:在看到来自dance2die的评论后,想到将示例powershell脚本放在一起以将类型名称导出到csv文件。

> [System.Reflection.Assembly]::LoadWithPartialName("System.Web") 

> [System.Web.Security.SqlMembershipProvider] | select {$_.UnderlyingSystemType.AssemblyQualifiedName } | export-csv c:\typenames.csv 

使用C#,如果你想生成设置的所有引用的程序集限定类型名称,很容易使用反射来建立测试脚本..

using System; 
using System.Reflection; 
........ 

Type ty = typeof(System.Web.Security.SqlMembershipProvider); 
string fullname = ty.AssemblyQualifiedName; 
//"System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
3

最简单的方法来查找信息是使用Reflector,加载组件,并复制Name出的议会的清单。当您在上面的窗口中选择装配体时,清单信息将位于Reflector的底部窗格中。

+0

这工作得很好,以及由于 – Sung 2009-01-14 16:24:50

0

AFAIK完全限定类型名称包含类名称和程序集签名。 我不认为你可以生成它...

该类型是命名空间。

可以将其设置在AssemblyInfo.cs中的版本(去掉*为保持相同)

将其设置在项目属性的公钥标记。

,从我记得

其他的方式是获得装配合格的名称可能是:

class Program 
    { 
     static void Main(string[] args) 
     { 
      string assemblyPath = args[0]; 
      Assembly loadedAssembly = Assembly.LoadFrom(assemblyPath); 
      Module[] modules = loadedAssembly.GetModules(); 
      Console.WriteLine("Assembly: " + loadedAssembly.GetType().Name); 
      foreach (Module module in modules) 
      { 
       Console.WriteLine("Module: {0}\nFullyQualifiedName: {1}", module.Name, module.FullyQualifiedName); 
       Type[] types = module.GetTypes(); 
       foreach (Type type in types) 
       { 
       Console.WriteLine("Type: {0}\n FullName: {1}", type.Name, type.FullName);  
       } 
      } 
      Console.ReadLine(); 
     } 
    } 
0

确定只使用它像Gulzar Nazim写道:

$ String typeName = typeof(AssemblyName.ClassName).AssemblyQualifiedName);

给你你可以在类型中使用它的全名。的getType(); 与我没有任何空更

0

使用外接输入你的命令的工作:

add-type -assemblyname "system.example" 
相关问题