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] :よりシンプルな PowerShell バージョン

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

5 に答える 5

8

これは、任意のアセンブリを右クリックして完全修飾名をクリップボードにコピーするための便利なツール(ソース コードを含むシェル拡張) です。

更新: dance2die からのコメントを見て、型名を csv ファイルにエクスポートするサンプルの powershell スクリプトをまとめることを考えました。

> [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"
于 2009-01-14T02:39:24.523 に答える
3

その情報を見つける最も簡単な方法は、ReflectorNameを使用し、アセンブリを読み込み、アセンブリのマニフェストからをコピーすることです。マニフェスト情報は、上のウィンドウでアセンブリを選択すると、Reflector の下部ペインに表示されます。

于 2009-01-14T02:21:06.277 に答える
1

わかりました、Gulzar Nazimが書いたように使用してください

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

type.getType(); で使用できるフルネームを提供します。それは私と一緒に動作し、null はもうありません

于 2015-03-05T08:58:13.690 に答える
0

私の知る限り、完全修飾型名はクラス名とアセンブリ署名で構成されています。私はあなたがそれを生み出すことができるとは思わない...

タイプは名前空間です。

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();
        }
    }
于 2009-01-14T02:30:12.107 に答える