I’m currently working on a project to do automatic Remoting publication of XPO services, and as this is supposed to run as a service, I wanted to put in trace messages. I hope every .NET programmer is aware of the nice tracing framework integrated in the .NET framework (if I caught you here, head here and work your way through the related topics). I wanted to use a TraceSwitch
instance and log messages with various levels throughout my code — this was easily done. Then I stumbled upon a problem: in some places in my code I log with levels Info
or Verbose
, but the default level for the trace switch I used was only 2
, i.e. Warning
.
When the library is being used by an application, that’s not a problem but a feature: via the configuration section in App.config
, the application developer can configure the trace level that is eventually being used by the switch. But when my unit and functional tests run (NUnit and TestDriven.NET), I would like to be able to see all the output from tracing for debugging purposes. Obviously there’s no App.config
in place at this point, so I had to find another way of setting the default trace level for the switch.
I looked around extensively for a way to set the value that’s otherwise read from the config file from code — no way. Basically the whole configuration stuff, as it applies to default sections like system.diagnostics
, is really well encapsulated in the System.Configuration
assembly, so without a lot of bad reflection code it’s not possible to influence things from that side.
To make a long(ish) story short, the solution I found is this: just create an App.config
file for the NUnit test assembly. What? Yes. Was complete news to me, but even though my test assembly is just a class library, it’s possible to add an App.config
to it, and the configuration I put in there is used for the test run. Nice — you (I, at least) never stop learning… :-)