I have developed a small custom publisher for CruiseControl.NET (it moves output files instead of copying them, cleans target folder before moving files and fixes a small issue in BuildPublisher).
Everything went well on the test server, but launching it on live build servers unexpectedly failed.
We are using "ccnet.exe --validate" to prevent crashing a server because of incorrect configuration, and new configuration file simply didn't pass validation. Though the configuration starts and works fine, just validation fails.
[Long unsuccessful searching story is omitted]
The solution: add a key "PluginLocation" into ccnet.exe.config file under AppSettings sections. Even if it points to the ccnet server folder, where, according to the documentation, ccnet server sees all assemblies by default.