2017-05-31 3 views
1

Ich arbeite an einem Projekt mit mehreren Lösungen. Ich habe kürzlich einen Verweis auf ein Nuget-Paket hinzugefügt, X in einer meiner Lösungen. Dies führte zu einigen Versionskonflikten, weshalb ich die Versionen von x in allen meinen Lösungen aktualisierte. Jetzt in Lösungen, die einen Konflikt hatte, kann ich die folgenden Zeilen sehen hinzugefügt wurdenUpdate nuget pacakge fügt Fehlerbedingung zu csproj

<Import Project="..\packages\X.3.3.2.0\build\X.props" Condition="Exists('..\packages\X.3.3.2.0\build\X.props')" /> 

<Error Condition="!Exists('..\packages\X.3.3.2.0\build\X.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\X.3.3.2.0\build\X.props'))" /> 

Weiß jemand, warum diese hinzugefügt wird und was ist die Bedeutung dieser Linien?

Antwort

1

NuGet-Pakete können Build-Logik zu aufwendigen Projekten hinzufügen, indem sie .props und/oder .targets Dateien in ihrem Ordner build haben.

Bei der Installation in "klassischen" csproj-Dateien (packages.config-Methode) fügt NuGet diese Anweisungen in die csproj-Datei ein, um diese Logik einzubeziehen. Was das eigentlich ist, hängt vom Paket ab. Einige Set-Werte für die Verwendung während des Build-Prozesses, einige fügen Content-Dateien hinzu, die in die Build-Ausgabe kopiert werden, und einige fügen benutzerdefinierte Build-Schritte hinzu (Transformationen usw.).

Das Element <Import … /> verbraucht die Logikdatei mit einer Bedingung, um zu verhindern, dass die Datei fehlt - z. wenn die NuGet-Pakete noch nicht wiederhergestellt wurden (neuer Clone/Checkout, Build-Server). Wenn die Condition nicht überprüft, ob die Datei vorhanden ist, kann die Projektdatei möglicherweise nicht in VS geladen werden.

Das Element gibt dann eine Fehlermeldung aus, wenn diese Datei nicht existiert, so dass VS nach dem Laden des Projekts einen Fehler anzeigen wird.

0

Das Problem wird verursacht, weil VS nuget-Pakete nicht sehr gut verwaltet. Wenn Sie Projektstandorte verschieben oder neu anordnen, müssen Sie möglicherweise die Pfade in der Projektdatei manuell korrigieren. Stellen Sie außerdem sicher, dass die Pfade für Projekt-A-Pakete nicht auf das Projekt-B-Paketverzeichnis zeigen. Ich habe viele Probleme mit nugget-Paketen gesehen, die durch ungültige Pfade in Projektdateien verursacht wurden.

Auch, ich beantworte Ihre Frage direkt, glaube ich, dass der Grund, warum Sie eine einzelne Fehlerzustandsprüfung sehen, ist, weil es von einem nugget-Paket hinzugefügt wurde. Das Hinzufügen der meisten nuget-Pakete führt nicht dazu, dass diese Prüfung Ihrer Projektdatei hinzugefügt wird, sondern nur Pakete, die von anderen nuget-Paketen abhängen. (Zum Beispiel könnte etwas, das von einem gemeinsamen Paket wie Newtonsoft.Json abhängig ist, diese Codezeile hinzufügen, um sicherzustellen, dass eine korrekte Version vorhanden war)

Ich denke (aber ich bin mir nicht sicher), dass dies vom Paket gesteuert wird author setzt eine Markierung oder etwas, im Gegensatz zu VS, die automatisch Abhängigkeitsketten aufspürt.

Das Entfernen dieser Überprüfungen ist harmlos und ermöglicht es Ihnen, einen ansonsten soliden Build in einer Prise abzuschließen, aber wenn Sie das tun, riskieren Sie einen Laufzeitfehler, wenn die richtige Assembly nicht vorhanden ist.

Verwandte Themen