web-dev-qa-db-de.com

Die Assets-Datei project.assets.json wurde beim Ausführen eines Builds in Azure Devops nicht gefunden

Ich habe eine Build-Pipeline für eine Service Fabric-Lösung auf Azure DevOps wie folgt konfiguriert:

 Build tasks

Bis vor einigen Tagen war alles in Ordnung, als der Build auf einem bestimmten Buildagenten (privat) fehlschlug, mit dem folgenden Fehler (für einige Projekte):

C:\Programme\dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets (327,5): Fehler: Datei "F:\Agent03\w\84\s"\src\MyProject.Sam.Tiles.Domain\obj\project.assets.json 'nicht gefunden. Führen Sie eine NuGet-Paketwiederherstellung aus, um diese Datei zu generieren.

Die fehlgeschlagene Aufgabe ist die Build solution $(PathToSolution)-Aufgabe.

Das Seltsame ist, dass der Build fehlschlägt, wenn er auf einigen Agenten ausgeführt wird, aber bei anderen ist der Build in Ordnung.

Ein paar Details:

  • Use NuGet 4.x task hat erst vor kurzem mit NuGet v4.9.1 angefangen, denke ich. Ich habe es mit v4.8.1 ohne Glück versucht.
  • Die meisten Projekte verwenden das Format PackageReference, während das Projekt .sfproj die Datei packages.config verwendet
  • Ich habe versucht, die dotnet restore-Task zu verwenden, aber beim Versuch, die Pakete für das .sfproj-Projekt wiederherzustellen, ist ein Fehler aufgetreten:

    `Fehler: Kann nicht gefunden werden '....\packages\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\build\Microsoft.VisualStudio.Azure.Fabric.Application.props' Datei. Bitte stellen Sie die .__ wieder her. 'Microsoft.VisualStudio.Azure.Fabric.MSBuild' Nuget-Paket

Irgendeine Idee, woran es liegen könnte?

4
Rui Jarimba

Einige Projekte verwenden das Format PackageReference, das Projekt .sfproj verwendet jedoch die Datei packages.config.

Ich kann immer noch nicht verstehen, warum der Build fehlgeschlagen ist, aber ich konnte eine Problemumgehung finden. Da PackageReference in Service Fabric-Projekten noch nicht unterstützt wird, bestand meine Problemumgehung darin, beide Wiederherstellungsaufgaben wie folgt zu verwenden:

 Build tasks

2
Rui Jarimba

Trevor's Kommentar zu 2/20 gab mir den Hinweis. Möglicherweise verfügen Sie nicht über die vollständigen Projekte, auf die die Lösung verweist. (ProjectReferences können für andere Projekte verwendet werden, die nicht in der Lösung enthalten sind).

Dies ist der Grund, warum diese verrückte Problemumgehung (Ausführen von Wiederherstellungsaufgaben mit dotnet.exe und nuget.exe) funktioniert:

dotnet Restore führt Projektreferenzen standardmäßig aus, um sicherzustellen, dass sie auch wiederhergestellt werden. Ein No-Dependencies-Schalter kann dies deaktivieren.

nuget.exe restore hat den umgekehrten Standard, weil wir alte Benutzer nicht brechen wollten. - rekursiv kann dies aktivieren.

Die richtige Lösung besteht darin, dass Ihre Lösung alle Projekte enthält.

-Rob Relyea NuGet Client Team, Engineering Manager

1
Rob Relyea

Mein Problem stellte sich als eine Lösung heraus, die nicht alle notwendigen Projekte enthielt.

Ich habe eine Master-Lösungsdatei, die all meine Projekte enthält, und eine Reihe kleinerer Lösungsdateien mit nur einigen der Projekte. Die Master-Lösung wurde gut in Azure DevOps eingebaut, die Teillösung schlug jedoch fehl.

Ich erkannte, dass die fehlende Datei project.assets.json zu einem Projekt gehörte, das in diese fehlerhafte Lösung aufgenommen werden musste.

0
Trevor