NuGet wiederherstellen PostSharp-Paket, bevor das bauen beginnt
Ich bin mit PostSharp und habe ich die folgende Ziel-Beschreibung in meiner Projekt-Datei:
<Target Name="EnsurePostSharpImported" BeforeTargets="BeforeBuild" Condition="'$(PostSharp30Imported)' == ''">
<Error Condition="!Exists('..\..\packages\PostSharp.3.1.33\tools\PostSharp.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://www.postsharp.net/links/nuget-restore." />
<Error Condition="Exists('..\..\packages\PostSharp.3.1.33\tools\PostSharp.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://www.postsharp.net/links/nuget-restore." />
</Target>
Soweit ich das verstanden habe, wird dieser dem Projekt Hinzugefügt wird, wenn PostSharp verwiesen wird über NuGet, und den Fehler überprüfen Sie die folgenden Bedingungen:
- Die ersten Fehler bricht der build, bei PostSharp ist nicht verfügbar (z.B. NuGet hat es nicht wiederherstellen erfolgreich).
- Die zweite Fehlerbedingung bricht der build, bei PostSharp wurde erfolgreich wiederhergestellt von NuGet auf der letzten build war aber deshalb nicht im Projekt enthalten ist, so deshalb ein Neubau notwendig ist.
ABER, wenn ich die folgende Konfiguration in NuGet.Config
und .csproj file
, ist der zweite Fehler-Bedingung auch notwendig?
NuGet.Config
Datei:
<configuration>
<packageRestore>
<!-- Allow NuGet to download missing packages -->
<add key="enabled" value="True" />
<!-- Automatically check for missing packages during build in Visual Studio -->
<add key="automatic" value="True" />
</packageRestore>
...
</configuration>
.csproj
Datei:
<RestorePackages>true</RestorePackages>
Soweit ich das verstanden habe, NuGet wird dann wieder die fehlenden Pakete, BEVOR der Erstellungsprozess beginnt. Die zweite Fehlerbedingung wird im wesentlichen brechen die bauen für überhaupt keinen Grund.
Hinweis: ich verwende Visual Studio 2013 und NuGet-2.8.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt davon ab, wie die Wiederherstellung ist getan, und die version von NuGet, das Sie installiert haben. Es sieht aus wie die Fehlermeldungen versuchen zu decken drei Szenarien:
Wenn Sie die MSBuild-basierten Paket wiederherstellen, dann die Wiederherstellung auftreten, während der Aufbau und die PostSharp-Dateien nicht importiert werden an dieser Stelle also die $(PostSharp30Imported) leer und die zweite Fehlermeldung angezeigt. Zumindest vermute ich, dass das der Fall ist.
Wenn Sie Gebäude von der Befehlszeile und nicht die Verwendung der MSBuild-basierten Paket wiederherstellen, dann würden Sie sehen, die erste Fehlermeldung, wenn Sie die NuGet-Pakete fehlten.
Wenn Sie nicht mit dem MSBuild-basierten Paket-Wiederherstellung, und sind Gebäude aus innerhalb von Visual Studio eine aktuelle version von NuGet, dann Sie sind richtig, dass die Pakete wiederhergestellt werden, bevor gebaut wird an allen. Also die PostSharp-Importe zur Verfügung stehen sollte MSBuild, bevor es selbst ausgeführt.
Als PostSharp-dlls erforderlich sind, während msbuild-laden (also Ziele verweisen auf diese dlls verfügbar sind während bauen), müssen Sie beim letzten Aufruf von msbuild.
Während in der VS ist es akzeptabel, klicken Sie auf erstellen, zweimal war ich mit PostSharp in der CI Umgebung und das Bedürfnis zu nennen, bauen auf Lösung zwei mal frustrierend war (erste build wiederherstellen nugets aber auch nicht bauen, wegen der Fehler).
Landete ich mit separaten build-Schritte:
NuGet.exe restore SolutionWithProjectsUsingPostSharp.sln
Müssen Sie Bearbeiten Sie die zweite Fehlerbedingung in der Ziel-in die csproj
<Target Name="EnsurePostSharpImported" BeforeTargets="BeforeBuild" Condition="'$(PostSharp30Imported)' == "">
<Error Condition="!Vorhanden ist('....\packages\PostSharp.3.1.33\tools\PostSharp.Ziele')" Text="Das Projekt verweist auf NuGet-Paket(E), fehlt auf diesem computer. Enable NuGet Package Restore, um Sie herunterzuladen. Weitere Informationen finden Sie unter http://www.postsharp.net/links/nuget-restore." />
<Error Condition="Exists('....\packages\PostSharp.3.1.33\tools\PostSharp.Ziele')" Text="bauen wiederhergestellt NuGet-Pakete. Erstellen Sie das Projekt erneut, um diese Pakete im build. Weitere Informationen finden Sie unter http://www.postsharp.net/links/nuget-restore." /></Target>>
Habe ich beantwortet, im detail in einer verschiedene post bei SO
Sind wir mit der 'alten' MSBuild-Integrierte Paket wiederherstellen ( .nuget\NuGet.targets-Datei ist vorhanden) und in der Regel speichern Sie nicht in den source-control-Pakete, sondern verlassen sich auf zu bauen, um Sie wiederherzustellen für jeden build.
Aber für PostSharp auf TeamCity build server, erhalte ich die Fehlermeldung :
Die einfachste Möglichkeit ist explizit in der Quelle der Pakete\PostSharp.VerXXX.
Alternativ-Lösung sein könnte die Migration auf automatische Paket-Wiederherstellung,
wie es geraten wurde, in Problem Mit PostSharp 3.x mit NuGet Automatisch Wiederherstellen
Rechten Maustaste auf die Lösung, Nuget-Pakete verwalten; und entfernen Sie die Pakete, die Sie nicht wollen .
Dieser Fehler zeigt sich auch , wenn Sie versuchen, wiederherstellen Sie die Pakete aus dem web. Verbinden Sie einfach Ihr selbst mit dem internet und dann versuchen das Projekt zu öffnen.
... Der Fehler ging Weg für mich auf folgende der oben genannten Schritte.