如何从类型的程序集限定名称中提取程序集全名?

时间:2009-12-02 05:05:48

标签: .net reflection assemblies types

我有一个类型的程序集限定名称,例如

  

MyNamespace.MyClass,MyAssembly,   版本= 1.0.0.0,文化=中立,   公钥=空

我想提取程序集全名,即

  

MyAssembly,版本= 1.0.0.0,   Culture = neutral,PublicKeyToken = null

显然我可以通过简单的字符串解析来做到这一点,但是是否有一个框架方法来执行此操作?

注意:我没有类型或程序集,只有字符串,这是问题的一个重要部分,因此myType.AssemblyQualifiedName,myType.Assembly.FullName等不会有帮助

3 个答案:

答案 0 :(得分:2)

overloadType.GetType接受一个可用于解析AssemblyName到程序集的函数。返回null通常会抛出异常,因为无法解析类型,但可以通过将false传递给throwOnError参数来抑制此异常。

用于解析的函数还可以在原始代码将返回的外部作用域中设置字符串变量。

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

namespace ConsoleApp {
    public static class Program {
        public static void Main() {
            var assemblyName = GetAssemblyName("MyNamespace.MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
            Debug.Assert(assemblyName == "MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
        }

        public static String GetAssemblyName(String typeName) {
            String assemblyName = null;
            Func<AssemblyName, Assembly> assemblyResolver = name => {
                assemblyName = name.FullName;
                return null;
            };

            var type = Type.GetType(typeName, assemblyResolver, null, false);
            if (type != null)
                return type.AssemblyQualifiedName;

            return assemblyName;
        }
    }
}

答案 1 :(得分:1)

下面:

public string AssemblyName(string assemblyQualifiedName) {
    Type type = Type.GetType(assemblyQualifiedName, false);
    if(type == null) {
         return Parse(assemblyQualifiedName);
    }
    return type.Assembly.Name;
}

编辑:等等。你没有组装?很抱歉成为坏消息的承载者,但是你需要解析。

答案 2 :(得分:0)

如果要使用GetType,则需要将程序集加载到当前域。您可以了解如何操作here

虽然看起来很多工作只是为了避免琐碎的解析......