I've been recently thinking about NLog.dll supporting multiple platforms
(.NET, Mono, .NETCF). There are some issues which make me seriously
reconsider providing versions of NLog.dll compiled for each supported
platform instead of just one binary that targets all.
The issues are:
1. I recently came up with an optimization to the File target on Unix
platform which could be implemented using some mono-specific APIs
(Mono.Posix.dll). Compiling this using .NET 1.0 compiler (although
technically possible for Mono 1.0 profile) is anything but "clean". It's
would not be possible with Mono 2.0 profile since the assemblies use new
format, incompatible with csc.exe 1.0.
2. .NET 2.0 has new configuration API (System.Configuration.dll) which
should be supported in addition to current configuration system, at least to
get obsolete-warning-free build.
3. There are some new .NET 2.0 APIs which beg for NLog support (like Console
with managed support for changing colors). With the introduction of WinFX,
we'll get the new WCF platform as well.
4. Most new development projects target .NET 2.0/VS2005 and .NET 1.0 will
probably become deprecated soon. It's theoretically possible to support
newer frameworks with older compiler, but it's very hackish and error-prone
(late binding, reflection and so on).
5. We already have a special build for .NET CF 1.0 (and there'll be a new
build for .NET CF 2.0 soon)
6. There are very few programs that target both Mono and .NET without
recompilation (I'm only aware of NAnt).
.NET 1.0 build would be the lowest-common-denominator-version supported on
all platforms (just like it is today) and other versions would have
additional features that target specific platforms.
Each target would be marked with an attribute stating its platform support
(framework & OS). This will be used to generate documentation so that the
user will always know which version to use to get particular target/layout
renderer under a particular operating system.
Please vote. Possible answers are:
+1 - produce multiple NLog.dll binary releases, one for each platform using
#if's in the code.
0 - undecided
-1 - keep single NLog.dll that targets all platforms
If I get a sum above 0, I'll make a new snapshot release for testing soon.