如何检索程序集的限定类型名称?

4

我该如何生成一个程序集限定的类型名称?

例如,在配置成员资格提供程序时,我需要为“SqlMembershipProvider”(在此示例中,我从某个地方复制了以下配置)提供程序集限定的类型名称以用于“type”属性。

如何生成这个程序集限定的类型名称? 是否每次都必须手动检查程序集类型并键入?

<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
5个回答

8
这是一个很不错的方便实用的工具(带有源代码的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"

使用PowerShell获取程序集限定名称的方法
[System.Web.Security.SqlMembershipProvider] | select {$_.UnderlyingSystemType.AssemblyQualifiedName }
System.Web.Security.SqlMembershipProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a
- dance2die

3

找到这些信息最简单的方法是使用Reflector,加载程序集并复制程序集清单中的Name。当您在窗口上选择程序集时,清单信息将显示在Reflector的底部窗格中。


1

好的,只需像Gulzar Nazim所写的那样使用它

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

这将给您完整的名称,您可以在type.getType()中使用它; 这对我起作用,不再出现null


0

在你的命令中使用 add type:

add-type -assemblyname "system.example"

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接