我需要解析程序集限定名而不使用AssemblyName,因为我得到System.IO.FileLoadException(程序集不可用)。
我只管理字符串而不是程序集。如果我有一个字符串,我想获得asm1和asm2字符串变量的以下字符串。
FullName =“CalidadCodigo.ParserSQL.Reglas.AnalisisSintactico”
Assembly =“CalidadCodigo.ParserSQL.AnalisisSintactico”
Version =“Version = 1.0.0.0”
文化=“文化=中立”
Public token =“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 ";
抛出异常: System.IO.FileLoadException:El nombre de ensamblado oelcódigobasedado no esválido。 (ExcepcióndeHRESULT: 0x80131047)。
System.Reflection.AssemblyName.nInit(装配&安培; assembly,Boolean forIntrospection, Boolean raiseResolveEvent) System.Reflection.AssemblyName.nInit() System.Reflection.AssemblyName..ctor(字符串 的AssemblyName)
答案 0 :(得分:5)
你能用逗号分割,修剪字符串,然后检查每个部分的预期前缀吗?
List<string> parts = name.Split(',')
.Select(x => x.Trim())
.ToList();
string name = parts[0];
string assembly = parts.Count < 2 ? null : parts[1];
string version = parts.Count < 3 ? null : parts[2];
string culture = parts.Count < 4 ? null : parts[3];
string token = parts.Count < 5 ? null : parts[4];
if (version != null && !version.StartsWith("Version="))
{
throw new ArgumentException("Invalid version: " + version);
}
// etc
答案 1 :(得分:4)
Jon的答案不适用数组类型,它可能在typename中有逗号,如“System.String [,],mscorlib,....” - 有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/yfsftwz6.aspx。 p>
这里更好:
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));
答案 2 :(得分:0)
如果您知道每个输入的信息顺序相同,则可以使用string.Split()
函数,然后为每个变量分配位于特定位置的字符串。
例如:
string s = "a,as,sd,ad";
string[] data = s.Split(new char[] { ',' });
然后你使用数据数据谎言:
fullname = data[0].Trim();
...