it-swarm.com.de

Die Erstellung des Team Foundation Service schlägt bei der Wiederherstellung des NuGet-Pakets fehl

Ich habe ein seltsames Problem mit meinem Team Foundation Service-Build. Ich stelle es in eine Warteschlange und es läuft gut, aber dann schlägt es mit dem folgenden Fehler fehl:

C:\a\src\Platform\Prod\Platform.Web\Platform.Web.csproj (436): The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.Microsoft.com/fwlink/?LinkID=317568.

Dann stelle ich den Build per Nachricht/URL erneut in die Warteschlange und ... es passiert wieder. Ich habe gegoogelt, aber ich scheine nicht herauszufinden, worum es geht. Ich kann in Visual Studio gut bauen und die Lösung ist für die Paketwiederherstellung konfiguriert. Irgendwelche Gedanken?

Danke im Voraus.

31
benjy

Die Lösung hierfür ist in link in der Fehlermeldung selbst angegeben.

Dies geschieht aufgrund einer auf dieser Seite angegebenen Verbesserung:

Die Verbesserung

Wir haben Microsoft.Bcl.Build aktualisiert, um einen anderen Ansatz zu verwenden. Das neue Version verwendet einen bedingten Import, ähnlich dem von NuGet automatische Importfunktion funktioniert. Dies erlaubt dem Projekt immer, Laden Sie in Visual Studio.

Microsoft.Bcl.Build fügt Ihrem Projekt jedoch auch ein Ziel hinzu, das wird ausgeführt, nachdem der Build abgeschlossen ist. Dieses Ziel prüft, ob der aktuell wiederhergestellte Pakete wiederhergestellt, und wenn dies fehlschlägt, schlägt die Erstellung mit einem .__ fehl. umsetzbare Fehlermeldung:

Beim zweiten Erstellen wird dieser Fehler behoben. Bitte beachten Sie, dass diese Der Fehler wird nur angezeigt, wenn Pakete fehlen, so dass er Ihnen nicht gefällt. muss immer zweimal bauen.

Dann gibt es für den Fall von Build Server/Continuous Integration (CI) Folgendes an:

Diese Lösung befasst sich nicht mit Build Server/Continuous Integration (CI) -Szenarien. Um die Wiederherstellung des Pakets erfolgreich auf der Server erstellen, haben Sie zwei Möglichkeiten:

  1. Checken Sie die .targets-Datei ein.
  2. Führen Sie das NuGet-Paket vor dem Erstellen Ihres Projekts/Ihrer Lösung explizit aus.

Ich denke, für Ihre Problemlösung sollten die beiden obigen Schritte befolgt werden.

15
RinoTom

Wenn jemand dieses Problem immer noch auf dem tfs build server hat, müssen Sie Folgendes tun:

  1. Stellen Sie sicher, dass alle Projekte in der Lösung, die Sie erstellen möchten, über das neueste Microsoft.Bcl.Build-Paket verfügen (aktualisieren Sie es einfach im Paketmanager).
  2. Nachdem der Build fehlgeschlagen ist, sehen Sie alle Projekte (in der Zusammenfassung des TFS-Buildprotokolls), die diesen Fehler generieren ("Der Build hat NuGet-Pakete wiederhergestellt ...").
  3. Öffnen Sie jede .proj-Datei dieses Projekts und kommentieren Sie das gesamte Zielelement aus, das mit 'Target Name = "EnsureBclBuildImported"' begonnen wurde.
  4. Checken Sie ein und versuchen Sie den Build erneut

Irgendwie scheint es, als würden nicht alle Projekte den alten Block von Build-Code entfernen, was zu Problemen führt (wenn ich es verstehe, ist es nicht mehr nötig, nachdem Microsoft ihren Bcl-Build-Prozess geändert hat).

47
Michael Logutov

Bei einem Web-API-Projekt bin ich auf dieses Problem gestoßen, aber wir verwenden NAnt.

Die Lösung bestand darin, das Nuget-Paket für Microsoft BCL Build Components auf das neueste (1.0.21) zu aktualisieren.

0
GotDibbs

Die richtige Lösung finden Sie hier: https://docs.Microsoft.com/ru-ru/nuget/consume-packages/package-restore-troubleshooter

Fügen Sie einfach NuGet.Config hinzu:

<!-- Package restore is enabled -->
<configuration>
    <packageRestore>
        <add key="enabled" value="True" />
        <add key="automatic" value="True" />
    </packageRestore>
</configuration>
0
Yevheniy Potupa

Hatte gerade das gleiche Problem mit TeamCity und nicht mit TFS. 

Wir stellen Pakete vor dem Erstellen explizit wieder her, dennoch laufen einige Projekte auf dem CI-Server aus. 

Wir konnten es lösen, ohne die csproj-Dateien zu hacken. 

Wir haben die Buildeigenschaft BclBuildImported = True erzwungen, nachdem Pakete wiederhergestellt wurden. Die Schurkenziele in den csproj-Dateien setzen voraus, dass diese Eigenschaft nicht festgelegt wird.

Dies ist möglicherweise eine robustere Methode, wenn Sie diese Eigenschaft in TFS problemlos festlegen können. 

0
lesscode

Ich habe ein ähnliches Problem in einem Xamarin-Projekt gesehen, und die folgenden Schritte haben mein Problem behoben.

  1. Stellen Sie den Projektmodus auf Alle freigeben und neu erstellen
  2. Setzen Sie den Projektmodus auf Debuggen und Alles neu erstellen
  3. Problem sortiert.

Komisch aber für mich gearbeitet, hoffe es hilft.

0
Nurhak Kaya

Entweder müssen die erforderlichen TFSBuild-Zieldateien in der Quellcodeverwaltung enthalten sein oder die NuGet-Pakete müssen wiederhergestellt werden, bevor Sie versuchen, die Lösung zu erstellen.

Details dazu finden Sie auf nuget.org .

Grundsätzlich müssen Sie eine neue Build-Projektdatei erstellen, die zuerst Pakete wiederherstellt und anschließend Ihre Lösung erstellt.

0
Scott Munro

Ich musste Pakete vor dem sauberen Ziel meines Build-Skripts wiederherstellen. Ich dachte irrtümlicherweise, dass das Wiederherstellen von Paketen vor dem Bauen ausreichend war.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets='GatherBinaries' xmlns='http://schemas.Microsoft.com/developer/msbuild/2003'>

    <Target Name='RestorePackages'>
        <Exec Command='tools\NuGet.exe Restore "Web.sln"'/>
    </Target>

    <!--
        must call RestorePackages prior to clean to avoid error the following error
        "The build restored NuGet packages. Build the project again to include these packages in the build."
        -->
    <Target Name='Clean' DependsOnTargets='RestorePackages'>
        <MSBuild Projects='Web.sln' Targets='Clean' Properties='Configuration=Release'/>
    </Target>

    <Target Name='Build' DependsOnTargets='Clean;RestorePackages'>
        <MSBuild Projects='Web.sln' Targets='Build' Properties='Configuration=Release'/>
    </Target>

</Project>
0
mcdon

Öffnen Sie das fehlerhafte csproj im Editor oder in einem anderen Editor. Prüfen Sie, ob das Ziel EnsureBclBuildImported im csproj verfügbar ist. Wenn ja, kommentieren Sie die zweite Fehlerbedingung innerhalb des Ziels aus, die den Build zum Scheitern veranlasst, auch wenn das Paket verfügbar ist (es ist ähnlich, das Build schlägt fehl, unabhängig davon, ob das Paket verfügbar ist oder nicht!).

<Target Name = "EnsureBclBuildImported" BeforeTargets = "BeforeBuild" Bedingung = "'$ (BclBuildImported)' == ''"> 

<Error Condition = "! Existiert ('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text = "Dieses Projekt verweist auf NuGet-Pakete, die auf diesem Computer fehlen. Aktivieren Sie NuGet Package Restore, um sie herunterzuladen. Weitere Informationen finden Sie unter http://go.Microsoft.com/fwlink /? LinkID = 317567 . " HelpKeyword = "BCLBUILD2001" /> 

<Error Condition = "Existiert (" ..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets ') " Text = "Der Build hat NuGet-Pakete wiederhergestellt. Erstellen Sie das Projekt erneut in Fügen Sie diese Pakete in den Build ein. Weitere Informationen finden Sie unter http://go.Microsoft.com/fwlink/?LinkID=317568 . " HelpKeyword = "BCLBUILD2002" /> 
</ Target> 

0
Saurabh Jha

Problemstory:

In meinem Fall hat einer meiner Teamkollegen das VisualStudio 2017 verwendet. Dort haben wir einige Nuget-Pakete aus der Projektdatei heruntergestuft, indem wir Versionen mit Händen wie postsharp usw. geschrieben haben. Dort hat es funktioniert und er hat den aktualisierten Code an gitlab geschickt. Auf meiner Seite habe ich den Code von Gitlab zu meinem lokalen Repo gepoolt und ich habe es mit VisualStudio 2019 geöffnet und ich nehme diesen Fehler

Lösung:

1 - Ich habe den Code mit VisualStudio 2017 aus meinem aktualisierten lokalen Repository geöffnet und damit neu erstellt.

2 - Ich habe VisualStudio 2017 geschlossen und mit VisualStudio 2019 wieder geöffnet. Der Wiederaufbau ist diesmal erfolgreich

Für alle, die sich gestellt haben

0
Hamit YILDIRIM