Avatar billede MikkelNielsen Nybegynder
09. december 2009 - 11:10

MSBuild og logging

Hej eksperter.

I det projekt jeg arbejder på lige nu har vi i vores .vsproj fil en reference til en "targets" fil, altså noget lignende det her:

<Import Project="SomePath\SomeProject.targets" />

SomeProject.targets refererer desuden en række .exe filer, som tilsammen udgør vores tool chain. Dvs. hver gang vi bygger vores Visual Studio projekt, kører der en række tools i baggrunden, der varetager en række forskellige opgaver. De nævnte tools er egen-udviklede og de er alle console apps, der gør flittigt brug af Console.WriteLine. Når vi bygger projektet kan vi se tool output i Visual Studios "Output" fane. Så langt så godt.

Hvis et af vores tools stopper pga. en fejl, så stopper build processen også (som den skal), men problemet er, at VS hopper til "Error List"-fanen, hvor den skriver noget i stil med det her:

Error    2    The command "SomeTool.exe" exited with code 1.

Og det er her, det egentlige problem er, for jeg vil gerne udskrive fejlmeddelelsen fra det pågældende tool i stedet, Hvordan gør man det?

Jeg havde en snedig plan (som jeg dog ikke kan få til at virke), der går ud på følgende:

Ændre vores .targets fil, så den ikke længere refererer de enkelte tools direkte men i stedet refererer et nyt tool, som jeg skriver. Altså:

<Exec Command="SomeTool.exe <param1> <param2>"/>
ændres til:
<Exec Command="MyTool.exe <SomeTool.exe> <param1> <param2>"/>

I MyTool.exe gør jeg så følgende:

// TaskWrapper nedarver Microsoft.Build.Utilities.Task
Task task = new TaskWrapper();
// BuildEngineStub implementerer Microsoft.Build.Framework.IBuildEngine samt IEventSource
BuildEngineStub engine = new BuildEngineStub( task );
ConsoleLogger logger = new ConsoleLogger();
logger.Initialize( engine );
// Execute() laver et ProcessStartInfo objekt og starter SomeTool.exe med de anførte parametre.
task.Execute();

Jeg havde så håbet, at eftersom det er mit tool, der starter de enkelte tools i vores tool chain, og eftersom mit tool implementerer IBuildEngine, ja, så kunne det måske lade sig gøre at vise vores egne fejlbeskeder i "Error List"-fanen i Visual Studio. Men jeg kan som sagt ikke få det til at virke, og ville også godt lige høre jeres mening om, hvorvidt jeg er på vildspor. :)

På forhånd tak,
Mikkel
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester