解析装配合格的名称?

Joa*_*rel 28 .net reflection parsing assemblies

我想解析.NET 3.5中的程序集限定名称.特别是,组件本身不可用,它只是名称.我可以想到很多方法可以手动完成,但我想我可能会遗漏一些在系统库中执行此操作的功能.有什么建议吗?

小智 18

的AssemblyName类可以解析组件名称为你,只把这个字符串传给它的构造英寸 如果你有一个程序集限定类型名称,我认为你必须首先删除字符串的类型部分(即一切直到第一个逗号).

  • AssemblyName构造函数抛出FileLoadException,除非它能够加载程序集 (10认同)
  • 剥离名称通常非常复杂.考虑甚至简单的Tuple <int,string>:"System.Tuple`2 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,Version = 4.0. 0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089" (7认同)

Pav*_*ara 6

MSDN上的MonoBNF语法中有一个解析器实现


小智 5

从.Net 4开始,你有一个新的Type.GetType覆盖:

public static Type GetType(
    string typeName,
    Func<AssemblyName, Assembly> assemblyResolver,
    Func<Assembly, string, bool, Type> typeResolver,
    bool throwOnError,
    bool ignoreCase
)
Run Code Online (Sandbox Code Playgroud)

请参阅http://msdn.microsoft.com/en-us/library/ee332784%28v=vs.100%29.aspx

您需要做的是在上述文档的示例中:

Type t2 = Type.GetType(test,
            (aName) => aName.Name == "MyAssembly" ? 
                Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : 
                Assembly.Load(aName),
            (assem, name, ignore) => assem == null ? 
                Type.GetType(name, false, ignore) : 
                assem.GetType(name, false, ignore), true
);
Run Code Online (Sandbox Code Playgroud)

您可以用更复杂的函数替换上面的lambdas.