Verhinderung von MSBuild erstellen eines Projekts in einem .sln ohne mithilfe des Projektmappen-Konfigurationen
Ich möchte hemmen den Aufbau von bestimmten Projekten in einer Lösung von Gebäude (innerhalb eines TeamCity Build-Konfiguration zu optimieren, um die Geschwindigkeit von meinem Commit Erstellen Sie feedback, wenn Sie wissen müssen).
Ich bin mir bewusst, dass der Lösung Konfigurationen Mechanismus, aber nicht wollen, zu zwingen, viel .sln
Dateien, um am Ende mit jeder permutation der Dinge, die ich möchte in der Lage sein, zu schalten. Ich habe übereinkommen aufgrund der Regel, wo ich will "zu sagen, Wenn ich mache die Commit Bauen, ich möchte nicht bei der letzten installer-Verpackung". (Und ich will nicht brechen Sie aus in eine eigene Lösung).
Ich lieber nicht verwenden, eine Lösung mit suchen und ersetzen in der .sln
- Datei oder in einer .proj
- Datei erstellt, die über [MsBuildEmitSolution][1]
. Ich bin mir bewusst, dass Fragen hier, die decken, die out of the box Lösung und diese leicht Verwandte Frage.
Sehe ich MSBuild /v:diag
sagt:
2>Target "Build" in file "Z.sln.metaproj" from project "Z.sln" (entry point):
Using "MSBuild" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "MSBuild"
Global Properties:
BuildingSolutionFile=true
CurrentSolutionConfigurationContents=<SolutionConfiguration>
<ProjectConfiguration Project="{C83D035D-169B-4023-9BEE-1790C9FE22AB}" AbsolutePath="X.csproj" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
<ProjectConfiguration Project="{15E7887D-F1DB-4D85-8454-E4EF5CBDE6D5}" AbsolutePath="Y.csproj" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
</SolutionConfiguration>
Also die Frage ist:
Gibt es eine ordentlich Art, der mir immer ein XPath ersetzen oder ähnliches, um die Wirkung der änderung BuildProjectInSolution="
True
"
zu BuildProjectInSolution="
False
"
für Projekt Y, oben
Gelingt das nicht, ist es ein relativ einfaches Bearbeiten ich tun kann, innerhalb einer .ccproj
(Eine Azure-1.4-Paket) oder eine .csproj
(generelles Projekt) - Datei zu verursachen, die Effekte (einschließlich Auslösung des abhängigen Projekte) für das Projekt aktiviert wird, innerhalb einer Kommandozeilen - msbuild Z.sln
Lösung bauen, aufgehoben?
- Es ist nichts falsch mit einem benutzerdefinierten MSBuild-Datei. Ich bin mir nicht sicher, warum das nicht qualifizieren, als eine saubere Lösung.
- Melton: ich habe bereits einen fantastischen benutzerdefinierten msbuild-Datei erstellen der Menge der Lösungen (parallel usw. erreichen fantastisch Durchsatz). Ich bin nach etwas, wo subsytems in das Produkt geladen werden kann, in VS und Projekte Hinzugefügt und weggenommen - daher
.sln
- Dateien. Ich wies darauf hin, dass sein traurig, wenn das einzige, was ich tun kann, ist Kraft MSBuild ausstrahlen .proj-Datei als gleichwertige, fühlt sich einfach liek, die Speicherung von bis Probleme für immer, wenn MSBuild-5 änderungen, die das Spiel (oder wenn Sie das VS-team endlich, dass .sln-Dateien, die nicht als spezielle Fälle ist irgendwie, naja, wichtig für Reale Projekte!) - Ich fühle mich ya. Die sln-Datei-problem ist lächerlich. Es gibt ein paar Probleme msbuild und die integration mit visual studio, die ich einfach nicht verstehen. Das schimpfen ist zu lang um hier zu posten.
- Melton: ich in der Regel lassen Sie sich nicht von solchen kleinen Problemen wie Länge verhindern, dass ich aus der Entlüftung 😀 Danke für die Antworten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, es qualifiziert sich als ordentlich, aber Sie können
CustomAfterMicrosoftCommonTargets
zu importierenmsbuild
- Datei over-ride dieBuildDependsOn
Eigenschaft, zeigt Sie auf Ihre eigenen benutzerdefinierten build-task. Grundsätzlich durch die EinstellungCustomAfterMicrosoftCommonTargets
erhalten Sie msbuild zu importieren einer msbuild-Datei, die Folgendes enthält:Bearbeiten
Können Sie die folgenden
MyBuild
Ziel Include - /Exclude-Projekte auf der Basis von regulären Ausdrücken übergeben, alsIncludeInBuild
undExcludeFromBuild
Eigenschaften. (Wenn Sie möchten komplexe regexes, können Sie fallen foul von MSBuild besonderen Charakter zu entkommen, aber dies funktioniert gut genug für einfache matching)ShouldBuild
. Diese Datei enthält eineUsingTask
(so kann ich mit c# inline-wie ich das hasse msbuild), die true oder false zurückgibt, basierend auf einigen input-Eigenschaften. Momentan habe ich nur die$(MSBuildProjectFullPath)
, und false zurückgeben, wenn es einen installer oder hatprototype
im Weg. Aber ich könnte mehrere Eigenschaften, einschließlich sagen ein regulärer Ausdruck-Zeichenfolge, oder einen XPath-string, oder etwas, dass ich verwenden können, um zu ermitteln, ob für das Projekt oder nicht.<IfIWantThis>
. Ich habe gerade mitString.Contains
, die ist ziemlich grob, aber Sie können diese so einfach oder so Komplex wie Sie möchten.String.Split
und dann die Batchverarbeitung zu tun, matching usw.). Vielen Dank für die Lösung!!!Sie könnte immer passieren das bestimmte Projekte, die Sie wünschen zu bauen, die als Parameter an die MSBuild.
MSBuild-Befehlszeile würde dann so Aussehen:
In TeamCity, Sie würden
<Project Name>:<Target Action>
im Ziel-Feld in der MSBuild-Läufer..sln
- Dateien. Für einen start, auch die Aufteilung der oben würde erfordern individuelle Aufgaben (werden, dass eine kompilierte oder eine PS-oder C# - TaskFactory-basierten). Ich bin wahrscheinlich fehlt Ihr Punkt thoughh und bleiben alle Ohren, wie mir, sitzend, mit 5 .sln-Dateien können die 50.csproj
/.ccproj
s darin gebaut, ohne die genannten Projekte*.AzurePackage
(oder vielleicht auch ohne die*.ccproj
s) ohne Spannmittel VS slns als GruppierungFüge ich ein system-parameter unter Parameter
system.ExcludeFromBuild
system.
)