Was macht das Microsoft.Bcl.Build NuGet-Paket?

82

Ich kann keine Dokumentation dazu finden - die Links auf der Microsoft.Bcl.Build Nuget-Seite bieten keine große Hilfe:

Dieses Paket enthält Komponenten für die Build-Infrastruktur, sodass Projekte, die auf bestimmte Microsoft-Pakete verweisen, erfolgreich erstellt werden können.

Verweisen Sie nicht direkt auf diese Pakete, es sei denn, Sie erhalten eine Build-Warnung, in der Sie aufgefordert werden, eine Referenz hinzuzufügen.

Beim Betrachten der Microsoft.Bcl.Build.targetsDatei sieht es so aus, als würde sie Bindungsumleitungen und Paketreferenzen verwalten. Es sieht so aus, als ob einige dieser Funktionen nur verwendet werden, wenn sie in Visual Studio ausgeführt werden.

Kann jemand weitere Informationen darüber geben, was dieses Paket bewirkt? Es ist ein Problem in unserer Build-Server-Umgebung . Kann es ignoriert werden, wenn vollständig aus dem Quellcode erstellt wird (z. B. Build-Server-Umgebung)?

Crimbo
quelle

Antworten:

26

Aus der Sicht Microsoft.Bcl.Build.targetshat es eine Reihe von Projektkonfigurationszielen, z.

  • EnsureBindingRedirects - Bestimmen Sie, welche Referenzen für Bindungsumleitungen aktiviert sind, und aktualisieren Sie die app.config mit diesen
  • BclBuildValidateNugetPackageReferences - Dieses Ziel überprüft, ob bei allen im aktuellen Projekt installierten Nuget-Paketen auch die Abhängigkeiten (transitiven Abhängigkeiten) im aktuellen Projekt installiert sind.

Aufgrund dieser Bewertung habe ich entschieden, dass diese Funktionalität nur in einer Entwicklungsumgebung benötigt wird, wenn NuGet-Abhängigkeiten hinzugefügt, entfernt oder aktualisiert werden. und dass es in einer CI-Umgebung ignoriert werden könnte, in der es Probleme verursacht.

Daher möchte ich die Abhängigkeit in meinen * .csproj-Dateien beibehalten, sie jedoch ignorieren, wenn ein CI-Build ausgeführt wird. Dazu habe ich einen bedingten Import für eine Build-Umgebungszieldatei (z. B. builder.targets) hinzugefügt, die diesen Block enthält:

<!-- Skip Microsoft.Bcl.Build functionality when building only from Source. -->
<PropertyGroup>
  <BclBuildImported>Ignore</BclBuildImported>
</PropertyGroup>

Dies hat den Nettoeffekt, dass die Ziele in einer CI-Umgebung ignoriert, aber in einer Entwicklungsumgebung aktiviert werden. Ich habe das seit über einer Woche laufen lassen und bisher keine Probleme ...

Ich würde immer noch gerne wissen, ob jemand bessere Informationen zu diesem Paket hat, die darauf hinweisen, dass dies eine schlechte Idee ist. Bisher bin ich der Meinung, dass es eine gute Idee ist.

Bearbeiten 2018-02-01:

Beachten Sie, dass der Ignorierparameter auch in der Befehlszeile übergeben werden kann, um die Microsoft.Bcl.Build.targetsLogik zu überspringen :

msbuild (targets, etc) /p:BclBuildImported=Ignore
Crimbo
quelle
Ich habe es nicht ganz verstanden So I want to keep the dependency in my *.csproj files, but ignore it. I did that by adding a conditional import on a build environment targets file (eg builder.targets), können Sie das näher erläutern?
JobaDiniz
Ich musste den Projektverweis auf Microsoft.Bcl.Build beibehalten, damit er während der Entwicklung / in Visual Studio verwendet werden kann. Die Logik wird während Abhängigkeitsaktualisierungen ausgeführt. Ich wollte es jedoch während der Erstellung von Build-Servern deaktivieren, da Probleme beim Ausführen auf einem Build-Server auftreten.
Crimbo
1
Um klarer zu machen, wie Sie dies überprüfen können, finden Sie hier ein Beispiel für das, was ich zu den Elementen <Ziel> und <Import> hinzugefügt habe: Für <Ziel>: Condition="$(BclBuildImported) != 'Ignore'"und für <Import>:Condition="$(BclBuildImported) != 'Ignore' And Exists('$(SolutionDir)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')"
Auri Rahimzadeh
Ich fand auch, dass dies eine dumme Sache war, die von meinem alten Code übrig geblieben war, der .nuget \
Something.targets
15

Es ist im Grunde eine Möglichkeit für ältere Pakete, die auf ältere .NETs abzielen, ohne Probleme auf neuen .NETs zu erstellen und zu kompilieren

Wenn Sie zu http://blogs.msdn.com/b/bclteam/p/bclbuild.aspx gehen, werden zwei Ankündigungen angezeigt, die auf https://devblogs.microsoft.com/dotnet/pcl-and-net-nuget- verlinken. Bibliotheken sind jetzt für Xamarin / und https://devblogs.microsoft.com/dotnet/improved-package-restore/ aktiviert , die dies erklären sollten.

Matthew Verstraete
quelle