private static AssemblyReference ReadAssemblyReference(string name, ref int position)
{
var assemblyName = ReadPropertyValue(name, ref position);
var version = new Version(0, 0, 0, 0);
string culture = null;
byte[] token = null;
while (position < name.Length && name[position] == ',')
{
position++;
SkipSpaces(name, ref position);
var propertyName = ReadPropertyName(name, ref position);
position++;
switch (propertyName.ToLowerInvariant())
{
case "version":
version = Version.Parse(ReadPropertyValue(name, ref position));
break;
case "culture":
culture = ReadPropertyValue(name, ref position);
break;
case "publickeytoken":
var value = ReadPropertyValue(name, ref position);
if (value != "null")
token = HexToByteArray(value);
break;
default:
throw new FormatException();
}
}
return new AssemblyReference(assemblyName, version)
{
Culture = culture,
PublicKey = token != null ? new DataBlobSignature(token) : null,
};
}