In another life I rewrote parts of the assembly loading mechanisms in Unity
for 4.3, so you might have hit a bug where it could be leaking assembly
references in such a way that makes it so Unity's mono never fully releases
the physical assembly image when it unloads/reloads the domain, so you
never get the new version loaded (which is my favourite side effect ever).
Might be a corner case from self-modifying the assembly with a reference to
itself. You should file a bug with Unity with a small repro test case.

andreia gaita
--------------------
blog.worldofcoding.com
andreiagaita.net
github.com/andreiagaita

On Tue, Sep 23, 2014 at 2:32 PM, Jb Evain <[email protected]> wrote:

> Hey,
>
> Agreed it looks like a bug in Unity. What do you mean by «I narrowed
> the problem to the custom attribute I add to the modified assembly»?
> If you use another mechanism to tag the assembly, it will be properly
> reloaded?
>
> Jb
>
> On Wed, Sep 17, 2014 at 7:21 PM, Andriy Tylychko
> <[email protected]> wrote:
> > I don't know if it's Unity3D or Cecil problem. It took some time to
> resolve
> > this issue, hopefully this description can help somebody else.
> >
> > I'm using Cecil to generate code in a Unity3D assembly: Unity calls my
> class
> > static constructor after building the assembly, I modify it by generating
> > some code and adding an assembly level custom attribute to flag the
> assembly
> > as "generated" one. Then I ask Unity to reload the assembly by call to
> > `UnityEditorInternal.InternalEditorUtility.RequestScriptReload()`. Unity
> > reloads the assembly, calls my static constructor again, I find my custom
> > attribute and don't touch the assembly this time.
> >
> > This worked fine until I upgraded Unity3D to v. 4.5.3 (from 4.2).
> >
> > It looks like Unity reloads the assembly the first time but after that it
> > doesn't reload it even on normal refresh, I mean even unmodified version,
> > until I restart it. At least this definitely looks like a bug in Unity.
> >
> > I narrowed the problem to the custom attribute I add to the modified
> > assembly. Comparing modified and not-modified assemblies manifests I
> noticed
> > that the custom attribute causes the assembly to reference itself, looks
> > like:
> >
> > ...
> > .assembly extern 'Assembly-CSharp'
> > {
> >   .ver 0:0:0:0
> > }
> > .assembly 'Assembly-CSharp'
> > {
> >   .custom instance void
> > [System.Core]System.Runtime.CompilerServices.ExtensionAttribute::.ctor()
> = (
> > 01 00 00 00 )
> >   .custom instance void
> >
> ['Assembly-CSharp']PropertySystem.PropertyGenerator/GeneratedAttribute::.ctor()
> > = ( 01 00 00 00 )
> >   .custom instance void
> >
> [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor()
> > = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
> >
> > 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
> >   .hash algorithm 0x00008004
> >   .ver 0:0:0:0
> > }
> > .module 'Assembly-CSharp.dll'
> > ...
> >
> > Can this be a problem?
> >
> > --
> > --
> > --
> > 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.
>

-- 
-- 
--
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.

Reply via email to