> From: mono-devel-list-boun...@lists.ximian.com [mailto:mono-devel-list-
> boun...@lists.ximian.com] On Behalf Of Greg Young
> 
> <Reference Include="Mono.Posix" Condition=" '$(OS)' != 'Windows_NT' " />

That doesn't do the trick all by itself, because then your code won't compile 
on windows, in all the places where something references Mono.Posix. If you 
want to use this as a solution, you'll need to define a compiler symbol in the 
project, and maintain different project files (or different build 
configurations) when building on windows or mono, and then #if to remove 
references to Mono.Posix, when built in windows. While this technique works, it 
would result in binaries that are not cross-platform compatible (maybe you 
don't care). And you have to maintain the separate project files, which is 
annoying.

The other way is to build a factory, and do a run-time check to load the 
appropriate assembly. For example, you can put the abstract StuffDoer class in 
a common assembly, which is available to all your platform agnostic code. Then 
write a StuffDoerWin derivative class in a windows-only assembly, and a 
StuffDoerMono class in a mono-only assembly. Choose which one to instantiate 
using a run-time check, like:

// This is defined in a common assembly
public static abstract class StuffDoer {
        public static StuffDoer CreateInstance() {
                if (Type.GetType("Mono.Runtime") == null) {
                        // running on windows
                        // Use Activator.CreateInstance to return an object of 
type StuffDoerWin, from my Windows assembly
                        return newStuffDoer;
                } else {
                        // running on mono
                        // Use Activator.CreateInstance to return an object of 
type StuffDoerMono, from my Mono assembly
                        return newStuffDoer;            }
        }
        public abstract void DoStuff();  // Must be overridden in derivative 
class
}

// This is defined in a windows-only assembly
public static class StuffDoerWin : StuffDoer {
        ...
}

// This is defined in a mono-only assembly
public static class StuffDoerMono : StuffDoer {
        // Here, I can use Mono.Posix stuff
        ...
}
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to