Wie kann ich das automatische Wiederherstellen von NuGet-Paketen bei jedem Build deaktivieren?
- Problemstellung und Ziel
- Deaktivieren in Visual Studio
- Deaktivieren für MSBuild / CI (Projekt- bzw. Lösungsebene)
- CI- und Befehlszeilen-Szenarien
- Nebenwirkungen und Empfehlungen
Problemstellung und Ziel
Bei jedem Build eines .NET-Projekts in Visual Studio oder mit MSBuild kann NuGet standardmäßig versuchen, fehlende Pakete automatisch wiederherzustellen. Das kann Builds verlangsamen oder gewollt deaktiviert werden (z. B. in CI-Umgebungen, bei manueller Paketverwaltung oder bei Offline-Arbeit). Ziel ist, diese automatische Wiederherstellung zu unterbinden, sodass nur dann Pakete geladen werden, wenn Sie es explizit auslösen.
Deaktivieren in Visual Studio
In Visual Studio können Sie die automatische Paketwiederherstellung global abschalten. Öffnen Sie „Extras“ → „Optionen“ → „NuGet-Paket-Manager“. Entfernen Sie dort das Häkchen bei „Paketwiederherstellung bei Build ausführen“ (oder ähnliche Bezeichnung, je nach VS-Version). Dadurch verhindert Visual Studio, dass beim Build fehlende Pakete automatisch heruntergeladen werden. Beachten Sie, dass dies eine Benutzereinstellung ist und nicht projektweit für andere Entwickler auf dem Repository gilt.
Deaktivieren für MSBuild / CI (Projekt- bzw. Lösungsebene)
Für reproduzierbare Konfigurationen ist es sinnvoll, die Einstellung auf Projekt- oder Lösungsebene zu definieren. Fügen Sie in die .csproj-Datei oder in eine Directory.Build.props-Datei eine Property hinzu, die MSBuild steuert. Setzen Sie beispielsweise RestoreDuringBuild auf false:
Diese Property verhindert, dass MSBuild/NuGet während des Builds eine Wiederherstellung startet. Legen Sie die Datei im Repository ab (z. B. Directory.Build.props), dann gilt die Einstellung für alle beteiligten Projekte.
CI- und Befehlszeilen-Szenarien
In CI-Pipelines oder beim manuellen Aufruf von dotnet build bzw. msbuild können Sie zusätzlich sicherstellen, dass keine automatische Wiederherstellung stattfindet, indem Sie RestoreDuringBuild über die Kommandozeile überschreiben: dotnet build -p:RestoreDuringBuild=false. Wenn Sie Restores separat steuern, führen Sie vor dem Build bei Bedarf einen expliziten dotnet restore aus; andernfalls schlägt der Build fehl, wenn Referenzen fehlen.
Nebenwirkungen und Empfehlungen
Das Deaktivieren der automatischen Wiederherstellung bedeutet, dass fehlende Pakete nicht mehr automatisch bezogen werden. Builds können daher fehlschlagen, wenn ein Entwickler oder die CI keine vorherige Paketwiederherstellung ausgeführt hat. Empfohlen ist, in Teamprojekten die Paketwiederherstellung bewusst zu steuern: entweder per dokumentiertem Workflow (vorher dotnet restore) oder durch Einchecken einer Repository-weiten Directory.Build.props, damit alle dieselbe Einstellung verwenden. In CI-Umgebungen ist es üblich, Restore explizit als eigenen Schritt auszuführen, um Netzwerkzugriffe und Caching besser zu kontrollieren.
Wenn Sie konkrete Dateien oder VS-Versionen nennen, kann ich die genauen Menütexte oder Datei-Snippets präziser anpassen.
