Hi,

I figured I'd answer on SO as it has better googlability.

http://stackoverflow.com/questions/12859040/error-system-void-mono-cecil-assemblydefinition-ctor-is-declared-in-anoth/12859571#12859571

On Oct 12, 2012, at 2:36 PM, Murugan wrote:

> Hi Everyone,
> I am using latest version of Mono.cecil
> What I am trying to do is I am having Custom Attributes in a seperate dll and 
> I want to add the attributes to every method in the sample.exe using 
> mono.cecil
> but i am getting the error
> 
> "Error 'System.Void Mono.Cecil.AssemblyDefinition::.ctor()' is declared in 
> another module and needs to be imported"
> 
> 
> Can any one help me in resolving it?
> 
> Expecting your help.....
> 
> //Main File Sample.exe
> 
> class SampleItems
>   {
> 
>   public static void Main()
>   {
>   }
>     public void Sample()
>     {
>       Console.WriteLine("sample");
>     }
> 
>     public void Sample1()
>     {
>     Console .WriteLine ("sample1");
>     }
>   }
> 
> ================================
> Seperate application applying the custom attribute
> 
> static void Main(string[] args)
>     {
>       //opens the assembly
>       AssemblyDefinition assemblyDefinition = 
> AssemblyDefinition.ReadAssembly(@"E:\MONOCECIL\POC SAMPLES\Sample.exe.exe");
> 
>       //AssemblyDefinition as1= AssemblyDefinition .ReadAssembly 
> (@"E:\MONOCECIL\POC SAMPLES\MonoStart\MonoStart\bin\Debug\SampleDll.dll");
> 
>       var resolver = new DefaultAssemblyResolver();
>       var systemName = AssemblyNameReference.Parse("SampleDll");
> 
>       AssemblyDefinition as1 = resolver.Resolve(systemName);
> 
>       var ty = assemblyDefinition.MainModule.Import(as1.GetType ());
> 
>       var attCtor = ty.Resolve().Methods.First(x => x.Name == ".ctor"
>    && x.Parameters.Count == 0); 
>       
>      
> foreach (var modDef in assemblyDefinition.Modules)
>       {
>        
>         foreach (var typeDef in modDef.Types)
>         {
>           Console.WriteLine("   +--Type {0}", typeDef.Name);
> 
>           //All methods in this type  
>           foreach (var methodDef in typeDef.Methods)
>           {
>             var custatt = new CustomAttribute(attCtor);
>            methodDef.CustomAttributes.Add(custatt); 
> 
>             Console.WriteLine("      --Method {0}", methodDef.Name);
>           }
>          
>           
>         }
>       }
> 
>       assemblyDefinition.Write(@"E:\POSTSHARP 
> SAMPLES\ASPECTDNG\Debug\Sampleupdate.exe");
>       Console .ReadLine ();
>     }  
> 
> ===============================
> Sample dll
> 
> using System;
> using System.Collections.Generic;
> using System.Linq;
> using System.Text;
> 
> namespace SampleDll
> {
>  [System.AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, 
> AllowMultiple=false )]
>   public sealed  class SampleClass :Attribute 
> 
>   {
> 
>   public SampleClass ()
>   {
>   }
> 
> 
>   }
> }
> 
> 
> 
> 
> -- 
> --
> mono-cecil

-- 
--
mono-cecil

Reply via email to