= 10000) { Log.LogError("Qt::BuildLock[{0}]: Timeout; wait aborted", Name); return false; } } while (!buildLock.WaitOne(1000)); } } else { // Unlock buildLock.Set(); } ]]> { "AccessedTime", "CreatedTime", "DefiningProjectDirectory", "DefiningProjectExtension", "DefiningProjectFullPath", "DefiningProjectName", "Directory", "Extension", "Filename", "FullPath", "Identity", "ModifiedTime", "RecursiveDir", "RelativeDir", "RootDir", }; if (Metadata == null) Metadata = ""; var requestedNames = new HashSet(Metadata.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); var itemXml = new StringBuilder(); if (Items.Any()) { foreach (var item in Items) { if (itemXml.Length > 0) itemXml.Append("\r\n"); itemXml.AppendFormat("<{0} Include=\"{1}\"", ItemType, item.ItemSpec); var names = item.MetadataNames.Cast() .Where(x => (DumpReserved || !reserved.Contains(x)) && (!requestedNames.Any() || requestedNames.Contains(x))) .OrderBy(x => x); if (names.Any()) { itemXml.Append(">\r\n"); foreach (string name in names) { if (!DumpReserved && reserved.Contains(name)) continue; if (!item.MetadataNames.Cast().Contains(name)) continue; var value = item.GetMetadata(name); if (!string.IsNullOrEmpty(value)) itemXml.AppendFormat(" <{0}>{1}\r\n", name, value); else itemXml.AppendFormat(" <{0}/>\r\n", name); } itemXml.AppendFormat("", ItemType); } else { itemXml.Append("/>"); } } } else { itemXml.AppendFormat("<{0}/>", ItemType); } Log.LogMessage(MessageImportance.High, itemXml.ToString()); ]]>