2009-01-14 57 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" 
相關問題