[Mono-osx] MonoMac.dll depends on System.Drawing.dll?
Lee V. Andrus
landrus2 at by-rite.net
Wed Sep 8 18:00:57 EDT 2010
1st, I also would like to see any dependence on System.Drawing
eliminated from MonoMac. This is only 1 of the inconsistencies with
such a dependency. Most Mono-Cocoa bridges define structures based on
Cocoa's NSPoint, NSSize, and NSRect. But don't hold your breath while
waiting for these guys to make a simple logical fix that would likely
break other user's code to accommodate your very special use. They
are very focused on serving the most common scenario.
2nd, my suggestion is not a namespace alias, but type aliases that
give you access to specific types without exposing the whole
namespace. The attached file illustrates this. It uses PointF and
RectangleF from System.Drawing with a custom class named Graphics.
3rd, If your wrapper assembly MUST define code in namespace
System.Drawing, I have 2 suggestions:
A) Rename it System.Drawing.dll in hopes that Monomac.dll will use
its Point, etc.
B) The compiler's -reference option can define an alias to
disambiguate assemblies that define the same namespace. Check out the
man page for mcs.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: hello graphics.cs.zip
Type: application/zip
Size: 1886 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-osx/attachments/20100908/e264b502/attachment.zip
-------------- next part --------------
On Sep 8, 2010, at 1:36 PM, Inspired Mars wrote:
> Namespace aliases will not fix this, as mentioned before.
> ...
> Thus, our wrapper for Graphics.AddLines cannot use our definition of
> PointF because
> CGContext expects the definition inside System.Drawing.dll.
> But our wrapper also cannot use the definition inside
> System.Drawing.dll because
> referencing that dll means we cannot have a wrapper by that name to
> begin with,
> since the dll defines exactly the same wrapper.
>
> The solution here is to ... directly define Point, Size, Rectangle,
> PointF, SizeF, RectangleF
> in MonoMac.dll. Then, our app would use these definitions and the
> rest of the System.Drawing wrappers
> our app defines would work.
>
> Net: This is a very simple fix to implement in MonoMac, and
> MonoTouch already works this way.
>
> Thanks
>
>
> On Wed, Sep 8, 2010 at 11:22 AM, Lee V. Andrus <landrus2 at by-
> rite.net> wrote:
>> Using directives can also be used to create aliases for specific
>> types
>> without exposing the whole namespace. Like this:
>>
>> using PointF = System.Drawing.PointF;
>>
>> I'm sure it's a pain to put so much at the top of every file because
>> C# doesn't have #include or typedef. But this can reduce the
>> solution
>> to boilerplate. You may even be able to incorporate it into your
>> standard header.
>>
>
More information about the Mono-osx
mailing list