I've written a command line tool that preprocesses a number of files then compiles them using CodeDom. The tool writes a copyright notice and some progress text to the standard output, then writes any errors from the compilation step using the following format:
foreach (var err in results.Errors) {
// err is CompilerError
var filename = "Path\To\input_file.xprt";
Console.WriteLine(string.Format(
"{0} ({1},{2}): {3}{4} ({5})",
filename,
err.Line,
err.Column,
err.IsWarning ? "" : "ERROR: ",
err.ErrorText,
err.ErrorNumber));
}
It then writes the number of errors, like "14 errors".
This is an example of how the error appears in the console:
Path\To\input_file.xrpt (73,28): ERROR: An object reference is required for the non-static field, method, or property 'Some.Object.get' (CS0120)
When I run this as a custom tool in VS2008 (by calling it in the post-build event command line of one of my project's assemblies), the errors appear nicely formatted in the Error List, with the correct text in each column. When I roll over the filename the fully qualified path pops up. The line and column are different to the source file because of the preprocessing which is fine. The only thing that stands out is that the Project given in the list is the one that has the post-build event.
The problem is that when I double click an error, nothing happens. I would have expected the file to open in the editor.
I'm vaugely aware of the Microsoft.VisualStudio.Shell.Interop namespace but I think it should be possible just by writing to the standard output.