|
|
|
@ -294,162 +294,6 @@ namespace ICSharpCode.Decompiler.Util
@@ -294,162 +294,6 @@ namespace ICSharpCode.Decompiler.Util
|
|
|
|
|
AddResource(name, value, string.Empty); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void AddMetadata(string name, string value) |
|
|
|
|
{ |
|
|
|
|
if (name == null) |
|
|
|
|
throw new ArgumentNullException(nameof(name)); |
|
|
|
|
|
|
|
|
|
if (value == null) |
|
|
|
|
throw new ArgumentNullException(nameof(value)); |
|
|
|
|
|
|
|
|
|
if (written) |
|
|
|
|
throw new InvalidOperationException("The resource is already generated."); |
|
|
|
|
|
|
|
|
|
if (writer == null) |
|
|
|
|
InitWriter(); |
|
|
|
|
|
|
|
|
|
writer.WriteStartElement("metadata"); |
|
|
|
|
writer.WriteAttributeString("name", name); |
|
|
|
|
writer.WriteAttributeString("xml:space", "preserve"); |
|
|
|
|
|
|
|
|
|
writer.WriteElementString("value", value); |
|
|
|
|
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void AddMetadata(string name, byte[] value) |
|
|
|
|
{ |
|
|
|
|
if (name == null) |
|
|
|
|
throw new ArgumentNullException(nameof(name)); |
|
|
|
|
|
|
|
|
|
if (value == null) |
|
|
|
|
throw new ArgumentNullException(nameof(value)); |
|
|
|
|
|
|
|
|
|
if (written) |
|
|
|
|
throw new InvalidOperationException("The resource is already generated."); |
|
|
|
|
|
|
|
|
|
if (writer == null) |
|
|
|
|
InitWriter(); |
|
|
|
|
|
|
|
|
|
writer.WriteStartElement("metadata"); |
|
|
|
|
writer.WriteAttributeString("name", name); |
|
|
|
|
|
|
|
|
|
writer.WriteAttributeString("type", value.GetType().AssemblyQualifiedName); |
|
|
|
|
|
|
|
|
|
writer.WriteStartElement("value"); |
|
|
|
|
WriteNiceBase64(value, 0, value.Length); |
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void AddMetadata(string name, object value) |
|
|
|
|
{ |
|
|
|
|
if (value is string) |
|
|
|
|
{ |
|
|
|
|
AddMetadata(name, (string)value); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (value is byte[]) |
|
|
|
|
{ |
|
|
|
|
AddMetadata(name, (byte[])value); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (name == null) |
|
|
|
|
throw new ArgumentNullException(nameof(name)); |
|
|
|
|
|
|
|
|
|
if (value == null) |
|
|
|
|
throw new ArgumentNullException(nameof(value)); |
|
|
|
|
|
|
|
|
|
if (!value.GetType().IsSerializable) |
|
|
|
|
throw new InvalidOperationException(String.Format("The element '{0}' of type '{1}' is not serializable.", name, value.GetType().Name)); |
|
|
|
|
|
|
|
|
|
if (written) |
|
|
|
|
throw new InvalidOperationException("The resource is already generated."); |
|
|
|
|
|
|
|
|
|
if (writer == null) |
|
|
|
|
InitWriter(); |
|
|
|
|
|
|
|
|
|
Type type = value.GetType(); |
|
|
|
|
|
|
|
|
|
TypeConverter converter = TypeDescriptor.GetConverter(value); |
|
|
|
|
if (converter != null && converter.CanConvertTo(typeof(string)) && converter.CanConvertFrom(typeof(string))) |
|
|
|
|
{ |
|
|
|
|
string str = (string)converter.ConvertToInvariantString(value); |
|
|
|
|
writer.WriteStartElement("metadata"); |
|
|
|
|
writer.WriteAttributeString("name", name); |
|
|
|
|
if (type != null) |
|
|
|
|
writer.WriteAttributeString("type", type.AssemblyQualifiedName); |
|
|
|
|
writer.WriteStartElement("value"); |
|
|
|
|
writer.WriteString(str); |
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
writer.WriteWhitespace("\n "); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (converter != null && converter.CanConvertTo(typeof(byte[])) && converter.CanConvertFrom(typeof(byte[]))) |
|
|
|
|
{ |
|
|
|
|
byte[] b = (byte[])converter.ConvertTo(value, typeof(byte[])); |
|
|
|
|
writer.WriteStartElement("metadata"); |
|
|
|
|
writer.WriteAttributeString("name", name); |
|
|
|
|
|
|
|
|
|
if (type != null) |
|
|
|
|
{ |
|
|
|
|
writer.WriteAttributeString("type", type.AssemblyQualifiedName); |
|
|
|
|
writer.WriteAttributeString("mimetype", ByteArraySerializedObjectMimeType); |
|
|
|
|
writer.WriteStartElement("value"); |
|
|
|
|
WriteNiceBase64(b, 0, b.Length); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
writer.WriteAttributeString("mimetype", BinSerializedObjectMimeType); |
|
|
|
|
writer.WriteStartElement("value"); |
|
|
|
|
writer.WriteBase64(b, 0, b.Length); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
MemoryStream ms = new MemoryStream(); |
|
|
|
|
BinaryFormatter fmt = new BinaryFormatter(); |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
fmt.Serialize(ms, value); |
|
|
|
|
} |
|
|
|
|
catch (Exception e) |
|
|
|
|
{ |
|
|
|
|
throw new InvalidOperationException("Cannot add a " + value.GetType() + |
|
|
|
|
"because it cannot be serialized: " + |
|
|
|
|
e.Message); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
writer.WriteStartElement("metadata"); |
|
|
|
|
writer.WriteAttributeString("name", name); |
|
|
|
|
|
|
|
|
|
if (type != null) |
|
|
|
|
{ |
|
|
|
|
writer.WriteAttributeString("type", type.AssemblyQualifiedName); |
|
|
|
|
writer.WriteAttributeString("mimetype", ByteArraySerializedObjectMimeType); |
|
|
|
|
writer.WriteStartElement("value"); |
|
|
|
|
WriteNiceBase64(ms.GetBuffer(), 0, ms.GetBuffer().Length); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
writer.WriteAttributeString("mimetype", BinSerializedObjectMimeType); |
|
|
|
|
writer.WriteStartElement("value"); |
|
|
|
|
writer.WriteBase64(ms.GetBuffer(), 0, ms.GetBuffer().Length); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
writer.WriteEndElement(); |
|
|
|
|
ms.Close(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void Close() |
|
|
|
|
{ |
|
|
|
|
if (writer != null) |
|
|
|
|