Wann wird MSBuild-Satz $(ProjectName) - Eigenschaft?
Ich bin Recht neu auf MSBuild, und ich habe getan, einige Anpassungen an einem Wpf-Projekt-Datei, die ich Baue beide in VS2010 und TFS2010. Ich habe benutzerdefinierte die output-Pfad wie folgt:
<OutputPath Condition=" '$(TeamBuildOutDir)' == '' ">$(SolutionDir)build\binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
<OutputPath Condition=" '$(TeamBuildOutDir)' != '' ">$(TeamBuildOutDir)binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
Dies ermöglicht es mir zu bauen, um ein zentralisiertes Verzeichnis binaries, wenn Gebäude auf dem desktop, und ermöglicht TFS zu finden, die binaries als CI-builds ausgeführt werden.
Jedoch, es scheint, dass in beiden Fällen die $(ProjectDir) Eigenschaft ist die Feststellung, " im Erstellungsvorgang, der schafft seltsame Ergebnisse. Dabei einige debugging, es scheint, als ob $(ProjectName) wird durch die Zeit BeforeBuild führt, aber dass meine OutputPath-Eigenschaft wertet es vor diesem Punkt.
<ProjectNameUsedTooEarly Condition=" '$(ProjectName)' == '' ">true</ProjectNameUsedTooEarly>
Den obigen Eigenschaft ist in der gleichen property group als meine OutputPath-Eigenschaft. In der BeforeBuild target, $(ProjectNameUsedTooEarly) zu true ausgewertet, aber $(ProjectName) " ergibt den Namen des Projekts als normale durch diesen Punkt.
Was kann ich tun, um sicherzustellen, dass $(ProjectName) hat einen Wert, wenn ich es verwenden?
edit: ich habe gerade verwendet Attrice ist MSBuild-Sidekick zum Debuggen durch meine build-Datei, und in der ersten Ziel steht für breakpoint (_CheckForInvalidConfigurationAndplatform) alle die Eigenschaften zu sein scheinen, bereits festgelegt. Projektname ist bereits richtig eingestellt, aber mein OutputPath-Eigenschaft bereits festgelegt wurde, mit der blank-Wert von ProjectName.
InformationsquelleAutor der Frage bwerks | 2010-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hmm - etwas Verwirrung dort passiert, die werde ich versuchen zu klären,
Nicht verwenden $(ProjectDir) - $(MSBuildProjectDir) - das ist die Position Ihres csproj in den source-tree und wird durch MSBuild.exe als Vorbehaltseigentum. Ich glaube nicht, dass $(ProjectDir) ist verfügbar, bis nach Microsoft.Common.Ziele importiert wurde (was von Microsoft.Csharp.Ziele). Die Bewertung von Liegenschaften erfolgt immer "in-place" innerhalb der Datei, und nicht, wenn alle Importe abgeschlossen haben. Dies könnte auch erklären, warum Sie sehen die Immobilie als gültig in das SideKick-tool
Ebenfalls $(MSBuildProjectName) (was ich denke, wird Adresse Ihre problem)
Ich bin mir nicht sicher über VS2010 und TFS2010 (wie verwendet MSBuild 4.0 und ohne Zweifel ein neues TeamBuild), aber im Jahr 2008, es ist ziemlich hart, innerhalb .csproj, um herauszufinden, ob Ihr zu bauen, wurde der Aufruf aus der Befehlszeile/IDE bauen oder in TeamBuild. Was ich versuche zu sagen ist, dass ich nicht denke, dass $(TeamBuildOutDir) ist verfügbar in Ihrem csproj. Ich normalerweise test $(TeamBuildConstants) Eigenschaft, wie die Eigenschaft ist weitergegeben, wenn teambuild ruft die proj-Datei. YMMV, als ich nicht gespielt habe mit 2010 noch..
InformationsquelleAutor der Antwort Peter McEvoy