2010-07-28 9 views
12

Ich bin ein .csproj Projekt anpassen, um einige benutzerdefinierte Aufgaben vor dem Hauptbuild auszuführen. Ich kann jedoch die Aufgaben überhaupt nicht ausführen.MS-Build BeforeBuild nicht feuern

Ich habe das <Target Name="BeforeBuild" /> Element in der Datei .csproj auskommentiert und eine einfache Nachricht Aufgabe hinzugefügt, aber wenn ich baue, erscheint die Nachricht nicht in meiner Ausgabe, so scheint es, dass die Aufgabe nicht ausgeführt wird. Also dieses Fragment gibt die Nachricht nicht aus;

Listing 1: keine Meldung angezeigt

<Target Name="BeforeBuild"> 
    <Message Text="About to build ORM layer" Importance="normal" /> 
</Target> 

Allerdings, wenn ich mit einigen der Attribute Schraube, ich die .csproj bekommen kann scheitern überhaupt auszuführen;

Listing 2: ein Konfigurationsfehler MSBuild

<Target Name="BeforeBuild"> 
    <Message Text="About to build ORM layer" XXImportance="normal" /> 
</Target> 

Notierte das XXImportance Attribut. Die Build-Fehler ich erhalte, sind

My.csproj(83,46): error MSB4064: The "XXImportance" parameter is not supported by the "Message" task. Verify the parameter exists on the task, and it is a settable public instance property. 

Dies deutet darauf hin, dass die XML analysiert wird, dass die Message Klasse gefunden wurde, und dass die Klasse wird für die verfügbaren Eigenschaften reflektiert über.

Warum sollte die Aufgabe nicht ausgeführt werden?

Ich benutze das 3.5-Framework.

UPDATE 1: Auf @ Martins Rat, habe ich versucht, MSBuild auf der Konsole auszuführen, und habe diesen Fehler erhalten;

c:\path\to\my.csproj(74,11): error MSB4019: The imported 
project "C:\Microsoft.CSharp.targets" was not found. Confirm 
that the path in the <Import> declaration is correct, and that 
the file exists on disk. 

Zeile 74 liest;

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

UPDATE 2: ich in VS2008 bin kompilieren, die die C# 3-Compiler verwendet, aber das Projekt, das ich kompilieren bin ist ein Framework 2.0-Projekt. Bei der Ausführung über die Befehlszeile (siehe UPDATE 1) scheint der Build fehlzuschlagen, da die Position Microsoft.CSharp.targets nicht eindeutig angegeben ist.

Antwort

14

Das Ereignis feuert, aber Sie müssen möglicherweise Ihre Einstellungen in VS ändern:

Extras-> Optionen-> Projekte und Solutions-> Build und Run:

Und gesetzt msbuild Ausführlichkeit zu minimal oder normal.

Wenn Sie über Msbuild in der Konsole kompilieren, sehen Sie die Nachricht, ohne die obigen Einstellungen ändern zu müssen.

+0

Hallo, Martin. Vielen Dank für die Antwort - ich weiß es zu schätzen. Ich bin schon auf minimale Ausführlichkeit, also glaube ich nicht, dass es das ist. Ich habe versucht, über die Konsole zu kompilieren, aber einen Fehler - ich habe es an den ursprünglichen Beitrag angehängt. Irgendwelche Ideen? –

+0

Haben Sie den Visual Studio Command Pront unter Visual Studio Tools (unter Microscreen Visist Studio 20xx) im Startmenü -> Alle Programme verwendet. Es legt eine Reihe von Umgebungsvariablen fest, die msbuild funktionieren lassen. –

+1

Auch Sie könnten es versuchen. normal statt minimal –

2

Es gibt eine Funktion in Visual Studio, die es Ihnen ermöglicht, debug MSBuild. Du könntest es versuchen. Es ist offiziell nicht unterstützt, aber nützlich.

15

Hatte das gleiche Problem heute und fand den Weg, damit es funktioniert.

Das BeforeBuild Ziel in Ihrem.csproj-Datei soll eine Neudefinition eines Ziels sein, das in der Microsoft.Common.targets-Datei definiert (und referenziert) wird, die von der Microsoft.CSharp.targets-Datei importiert wird, die wiederum von Ihrem .csproj importiert wird.

Ihr Problem besteht darin, dass die Zeile in Ihrem .csproj, die Microsoft.CSharp.targets importiert, nach Ihrer Definition des BeforeBuild-Ziels ist. Verschieben Sie die Importlinie über Ihr BeforeBuild-Ziel und alles sollte gut funktionieren.

Hoffe, dass hilft,