ReferenceElement IReferenceParser.Parse(string raw) { if (!raw.StartsWith(GuidToken, StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException(); } ReferenceElement reference = new ReferenceElement(); // *\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\Windows\system32\stdole2.tlb#OLE Automation raw = raw.Substring(3); string[] parts = raw.Split(PartSplitChar); if (parts.Length == 5) { reference.Guid = Guid.Parse(parts[0]); reference.Version = parts[1]; reference.Reserved = parts[2]; reference.FileName = parts[3]; // The file name sometimes features a backslash, which we remove and store in a separate property. if (char.IsNumber(reference.FileName.Last())) { int iSlash = reference.FileName.LastIndexOf('\\'); reference.FileNameTrailer = reference.FileName; reference.FileName = reference.FileName.Substring(0, iSlash); reference.FileNameTrailer = reference.FileNameTrailer.Remove(0, iSlash); } reference.Name = parts[4]; } return reference; }
string IReferenceParser.Parse(ReferenceElement reference) { return reference.ToString(); }