Is there a way of reading the definition without having to go to the assembly's location and reading the binary? Like having Cecil resolve it using just a name and a version number? The assembly is referenced in the assembly I'm modifying (It's just System).
On Monday, July 27, 2015 at 5:06:40 PM UTC+3, Jb Evain wrote: > > Ah I think I see. > > That must be because you're using the System.Reflection type system. > > To achieve what you want, you simply need to use the Cecil type system. > > Read the AssemblyDefinition for the assembly that contains the > DescriptionAttribute, and import a reference to the MethodDefinition > constructor into your module. > > Jb > > On Mon, Jul 27, 2015 at 3:52 PM, Greg Rosenbaum <[email protected] > <javascript:>> wrote: > > Okay, let me try to explain it again, and this time giving a specific > > example. I want to attach, say, DescriptionAttribute to an assembly I'm > > modifying. > > I need to attach the version of that attribute which is compatible with > that > > assembly's target framework version (changing the target framework, even > if > > I wanted to do this, probably isn't possible in this case). > > In order to do this, I must get a TypeReference to this attribute's > type. > > I'm having trouble getting a TypeReference to the correct version of the > > attribute that comes from the correct assembly. Whatever I do, I can > only > > manage to get a reference to the newer type (the one that is referenced > by > > my modifying assembly). > > > > On Monday, July 27, 2015 at 3:30:05 PM UTC+3, Jb Evain wrote: > >> > >> Hey Greg, > >> > >> I'm not 100% sure I understand your description of the issue, but you > >> can't use a type defined in a newer version of the .NET framework in > >> an assembly targeting an older version. > >> > >> Is this what you're trying to do? > >> > >> If so, you'll need to change the target framework for the assembly, > >> and fix up its references to the newer version, but it can get hairy > >> if you're using 3rd party assemblies. > >> > >> Jb > >> > >> > >> > >> On Sun, Jul 26, 2015 at 6:20 PM, Greg Rosenbaum <[email protected]> > >> wrote: > >> > Hey there. I've sort of run into a problem, and I'm wondering if > anyone > >> > can > >> > help me. > >> > > >> > I'm trying to modify an assembly that uses framework version 3.5, but > I > >> > don't want to be limited to that framework myself. I want to embed > some > >> > attributes into it, and to do that I need to get references to their > >> > types, > >> > from the correct assembly version. The attributes are standard .NET > >> > attributes and their assemblies live in the GAC. > >> > > >> > I can't seem to manage to do that. I can't import my own types, > because > >> > they're from a higher version assembly, and I trying to get the > correct > >> > assembly by name (using Module.AssemblyResolver.Resolve), doesn't > seem > >> > to > >> > work, even if I specify the exact version I want. It just resolves > the > >> > wrong > >> > assembly. > >> > > >> > The only thing that seemed to work was using > >> > System.Reflection.Assembly.ReflectionOnlyLoad to load the assembly > from > >> > its > >> > AssemblyName (version + name), and using that FullName (which > includes > >> > the > >> > public key) to resolve the assembly using AssemblyResolver. However, > >> > this > >> > doesn't work properly either, because then the modified assembly gets > an > >> > indirect dependency on a higher version of mscorlib, somehow. Also, > this > >> > seems like a really roundabout way to do this. > >> > > >> > -- > >> > -- > >> > -- > >> > mono-cecil > >> > --- > >> > You received this message because you are subscribed to the Google > >> > Groups > >> > "mono-cecil" group. > >> > To unsubscribe from this group and stop receiving emails from it, > send > >> > an > >> > email to [email protected]. > >> > For more options, visit https://groups.google.com/d/optout. > -- -- -- mono-cecil --- You received this message because you are subscribed to the Google Groups "mono-cecil" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
