不使用AssemblyName解析程序集限定名称

Kiq*_*net 4 c# parsing assemblies

我需要解析程序集限定名而不使用AssemblyName,因为我得到System.IO.FileLoadException(程序集不可用).

我只管理字符串而不是程序集.如果我有一个字符串,我希望得到asm1和asm2字符串变量的字符串,如下所示.

FullName ="CalidadCodigo.ParserSQL.Reglas.AnalisisSintactico"

汇编="CalidadCodigo.ParserSQL.AnalisisSintactico"

版本="版本= 1.0.0.0"

文化="文化=中立"

公共令牌="PublicKeyToken = 9744987c0853bf9e"

任何建议,示例代码?

var asm1 = "CalidadCodigo.ParserSQL.Reglas.AnalisisSintactico,CalidadCodigo.ParserSQL.AnalisisSintactico, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e";


var asm2 = "CalidadCodigo.ParserSQL.Reglas.AnalisisSintactico,                CalidadCodigo.ParserSQL.AnalisisSintactico          , Version=1.0.0.0     , Culture=neutral,    PublicKeyToken=9744987c0853bf9e              ";
Run Code Online (Sandbox Code Playgroud)

引发异常:System.IO.FileLoadException:El nombre de ensamblado oelcódigobasedado noesválido.(ExcepcióndeHRESULT:0x80131047).

System.Reflection.AssemblyName.nInit(Assembly&assembly,Boolean forIntrospection,Boolean raiseResolveEvent)System.Reflection.AssemblyName.nInit()System.Reflection.AssemblyName..ctor(String assemblyName)

小智 5

乔恩(Jon)的答案不包含数组类型,数组类型的类型名称中可能带有逗号,如“ System.String [,],mscorlib,....”中所示-请参阅http://msdn.microsoft.com/zh-cn /library/yfsftwz6.aspx了解详情。

更好:

int index = -1;
int bcount = 0;
for (int i = 0; i < aqtn.Length; ++ i)
{
    if (aqtn[i] == '[')
        ++bcount;
    else if (aqtn[i] == ']')
        --bcount;
    else if (bcount == 0 && aqtn[i] == ',')
    {
        index = i;
        break;
    }
}
string typeName = aqtn.Substring(0, index);
var assemblyName = new System.Reflection.AssemblyName(aqtn.Substring(index + 1));
Run Code Online (Sandbox Code Playgroud)