Ejemplo n.º 1
0
 public static void AddRange <T>(this Mono.Collections.Generic.Collection <T> self, IEnumerable <T> range)
 {
     foreach (var item in range)
     {
         self.Add(item);
     }
 }
Ejemplo n.º 2
0
    /// <summary>
    /// Adds a given resourcename and data to the app resources in the target assembly
    /// </summary>
    /// <param name="ResourceName"></param>
    /// <param name="ResourceData"></param>
    /// <remarks></remarks>
    public void Add(string ResourceName, byte[] ResourceData)
    {
        // make sure the writer is initialized
        InitAssembly();

        // have to enumerate this way
        for (var x = 0; x <= _Resources.Count - 1; x++)
        {
            var res = _Resources[x];
            if (res.Name.Contains(".Resources.resources"))
            {
                // Have to assume this is the root application's .net resources.
                // That might not be the case though.

                // cast as embeded resource to get at the data
                var EmbededResource = (Mono.Cecil.EmbeddedResource)res;

                // a Resource reader is required to read the resource data
                var ResReader = new ResourceReader(new MemoryStream(EmbededResource.GetResourceData()));

                // Use this output stream to capture all the resource data from the
                // existing resource block, so we can add the new resource into it
                var    MemStreamOut  = new MemoryStream();
                var    ResWriter     = new System.Resources.ResourceWriter(MemStreamOut);
                var    ResEnumerator = ResReader.GetEnumerator();
                byte[] resdata       = null;
                while (ResEnumerator.MoveNext())
                {
                    var    resname = (string)ResEnumerator.Key;
                    string restype = "";
                    // if we come across a resource named the same as the one
                    // we're about to add, skip it
                    if (Strings.StrComp(resname, ResourceName, CompareMethod.Text) != 0)
                    {
                        ResReader.GetResourceData(resname, out restype, out resdata);
                        ResWriter.AddResourceData(resname, restype, resdata);
                    }
                }

                // add the new resource data here
                ResWriter.AddResourceData(ResourceName, "ResourceTypeCode.ByteArray", ResourceData);
                // gotta call this to render the memory stream
                ResWriter.Generate();

                // update the resource
                var buf         = MemStreamOut.ToArray();
                var NewEmbedRes = new EmbeddedResource(res.Name, res.Attributes, buf);
                _Resources.Remove(res);
                _Resources.Add(NewEmbedRes);
                // gotta bail out, there can't be 2 embedded resource chunks, right?
                break;                 // TODO: might not be correct. Was : Exit For
            }
        }
    }
Ejemplo n.º 3
0
 void CreateCustomAttribute(string attrName, out TypeReference attrType,
                            Mono.Collections.Generic.Collection <TypeDefinition> types)
 {
     attrName = "java.attr." + attrName;
     if (typeMap.TryGetValue(attrName, out attrType))
     {
         typeMap.Remove(attrName);
     }
     else
     {
         var attrTypeDef = CreateCustomAttribute(attrName);
         types.Add(attrTypeDef);
         attrType = attrTypeDef;
     }
 }