If you want to completely change the namespace of System.Net, you're
going to need to change the Mono runtime

If you have a look at:

https://github.com/mono/mono/blob/master/mono/metadata/socket-io.c

You'll notice it has several hard coded references to the type names:

https://github.com/mono/mono/blob/b92e560d3f5e2684dfb8af954bebb6b938712598/mono/metadata/socket-io.c#L595
https://github.com/mono/mono/blob/b92e560d3f5e2684dfb8af954bebb6b938712598/mono/metadata/socket-io.c#L838
https://github.com/mono/mono/blob/b92e560d3f5e2684dfb8af954bebb6b938712598/mono/metadata/socket-io.c#L1807
https://github.com/mono/mono/blob/b92e560d3f5e2684dfb8af954bebb6b938712598/mono/metadata/socket-io.c#L628

So if the managed counter part changes, the runtime part won't work.

Jb

On Thu, Jan 8, 2015 at 10:17 PM, Brent Farris <[email protected]> wrote:
> Ah!  Thank you so much for the reply.  So, if I understand correctly, I will
> not be able to solve this with Cecil, but will need to build out my own
> version of the System.dll from Mono?
>
> On Thursday, January 8, 2015 at 1:10:33 AM UTC-8, Jb Evain wrote:
>>
>> Hi Brent,
>>
>> This one is pretty simple : some code for the socket support is
>> implemented in the runtime (icalls), and are identified by assembly
>> name + full type name.
>>
>> So if you rename the namespace of the type defining the icall, the
>> runtime won't be able to map the icalls properly.
>>
>> Jb
>>
>> On Thu, Jan 8, 2015 at 2:09 AM, Brent Farris <[email protected]> wrote:
>> > (Sorry if this posts 2x, the other post didn't show up/went off into
>> > oblivion)
>> >
>> > Hello, I am curious if anyone happens to know why when I change the
>> > namespace of System.Net.Sockets to anything else why it would stop
>> > working?
>> >
>> > I have tested other classes and methods and when I put in a Try/Catch I
>> > found that the issue was that it was unable to call the internal method
>> > "Socket_internal".  I am sure that this is a problem with any of the
>> > internal methods as well.  I am doing a very simple namespace
>> > repalcement.
>> > Also, please forgive any ignorance, I am fairly new to IL but not C#.  I
>> > would like to note that I have tried this by removing the entire foreach
>> > loop in the first code snipit and it worked just fine with that library
>> > (MySystem.dll) using System.Net.Sockets (was not refrencing the normal
>> > System).  So I must be doing something wrong when I rename (or breaking
>> > somekind of link to internal functions).  I have tested this by renaming
>> > it
>> > to System.MyNet.Sockets as well as System.Net.MySockets and all rename
>> > attempts at any level cause the failure.
>> >
>> > Namespace re-write code:
>> > using Mono.Cecil;
>> >
>> > namespace CecilNamespaceRenamer
>> > {
>> >     class Program
>> >     {
>> >         static void Main (string[] args)
>> >         {
>> >             var assembly = AssemblyDefinition.ReadAssembly
>> > (@"/path/to/dir/System.dll");
>> >             var name = assembly.Name;
>> >
>> >             name.Name = "MySystem.dll";
>> >
>> >             foreach (var t in assembly.MainModule.Types)
>> >             {
>> >                 if (t.Namespace.StartsWith("System"))
>> >                     t.Namespace = t.Namespace.Replace ("System",
>> > "MySystem");
>> >             }
>> >
>> >             assembly.Write(@"/path/to/dir/MySystem.dll");
>> >         }
>> >     }
>> > }
>> >
>> > Library test code:
>> > using System;
>> > using MySystem.Net;
>> > using MySystem.Net.Sockets;
>> >
>> > namespace TEsT
>> > {
>> >     class MainClass
>> >     {
>> >         public static void Main (string[] args)
>> >         {
>> >             TcpListener tcpListener = null;
>> >
>> >             try
>> >             {
>> >                 tcpListener = new
>> > TcpListener(IPAddress.Parse("127.0.0.1"),
>> > 15937);
>> >                 tcpListener.Start();
>> >             }
>> >             catch (MissingMethodException e)
>> >             {
>> >                 Console.WriteLine(e.Message);
>> >             }
>> >
>> >             Console.WriteLine("TEST");
>> >             Console.ReadKey();
>> >             tcpListener.Stop();
>> >         }
>> >     }
>> > }
>> >
>> >
>> > --
>> > --
>> > --
>> > 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