【问题标题】:How can I retrieve an assembly's qualified type name?如何检索程序集的限定类型名称?
【发布时间】:2010-10-01 07:09:36
【问题描述】:

如何生成程序集限定类型名称?

例如,在配置成员资格提供程序时,我必须在“类型”属性中为“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>

[更新]Simpler PowerShell version

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

【问题讨论】:

    标签: c# asp.net configuration powershell web-config


    【解决方案1】:

    这是一个不错的 handy tool(带有源代码的 shell 扩展),用于通过右键单击任何程序集将完全限定名称复制到剪贴板。

    更新:在看到 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"
    

    【讨论】:

    • 谢谢,Gulzar 使用 PowerShell 获取程序集限定名称的方法 >[System.Web.Security.SqlMembershipProvider] |选择 {$_.UnderlyingSystemType.AssemblyQualifiedName} System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    【解决方案2】:

    查找该信息的最简单方法是使用Reflector,加载程序集,然后将Name 从程序集的清单中复制出来。在上面的窗口中选择您的程序集时,清单信息将显示在 Reflector 的底部窗格中。

    【讨论】:

      【解决方案3】:

      好的,就像 Gulzar Nazim 写的那样使用它

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

      给你全名,你可以在 type.getType(); 这对我有用,不再为空

      【讨论】:

        【解决方案4】:

        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();
                }
            }
        

        【讨论】:

          【解决方案5】:

          在你的命令中使用添加类型:

          add-type -assemblyname "system.example"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-11-04
            • 2023-03-08
            • 1970-01-01
            • 2010-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-06
            相关资源
            最近更新 更多