Einige Zusammenhänge:
Ich habe das Tutorial zur Verwendung von NuGet befolgt , ohne Pakete mit einigem Erfolg festzuschreiben . Nachdem Sie dieses NuGet-Problem durch manuelles Hinzufügen <RestorePackages>
und <Import ...>
für die Datei nuget.targets umgangen hatten, funktionierten die Dinge.
Nachdem ich das Repository mit Mercurial geklont habe, wurde beim Erstellen der folgende Fehler angezeigt:
'C: \ ... \ Visual Studio 2010 \ Projects \ MyProject \ .nuget \ nuget.exe' konnte nicht gefunden werden.
Dies ist sinnvoll, da ich aufgrund meines Ignoriermusters die exe-Datei nicht einchecken konnte. Aus dieser verwandten SO-Frage folgerte ich, dass es nicht ungewöhnlich ist, diese Datei in der Versionskontrolle zu haben (oder?), Aber ich würde es wirklich vorziehen, NuGet.exe nicht zur Versionskontrolle zu verpflichten, wenn ich helfen kann.
Frage: Gibt es eine bequeme Möglichkeit, das Einchecken in NuGet.exe zu verhindern?
Ich habe Google-Fu ausprobiert, die Dokumentation überflogen und mit der Datei NuGet.targets herumgespielt, bisher kein Glück. Es scheint vorzuziehen, wenn ich nur dynamisch auf die NuGet.exe der bestimmten Umgebung verweisen könnte, in der die Lösung erstellt wird.
Ich weiß, dass ich einfach die exe-Datei hinzufügen könnte, aber ich würde lieber wissen, ob es andere Möglichkeiten gibt, damit umzugehen, oder warum es keine praktikablen Alternativen gibt.
Update:
Die Datei nuget.targets enthält einige relevante XML-Dateien:
<!-- only (relevant) parts of the xml shown below -->
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
...
<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<Task>
<Code Type="Fragment" Language="cs">
<![CDATA[
try {
OutputFilename = Path.GetFullPath(OutputFilename);
Log.LogMessage("Downloading latest version of NuGet.exe...");
WebClient webClient = new WebClient();
webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename);
return true;
}
catch (Exception ex) {
Log.LogErrorFromException(ex);
return false;
}
]]>
</Code>
</task>
</UsingTask>
Ich bin mit der Funktionsweise von .targets-Dateien nicht vertraut, aber dies scheint in etwa dem zu entsprechen, wonach ich suche. Mit meinem Cowboy-Codierung auf I Hut versucht , das zu ändern , false
um true
in dem DownloadNuGetExe Elemente, aber das hat nicht wie erwartet (mit oder ohne die Bedingung Attribut).
quelle
Antworten:
Gerade überprüft: nuget.targets ist eine msbuild-Datei. Und Sie waren auf dem richtigen Weg, in:
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
Ändern Sie den Wert in true:
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>
Sie müssen Visual Studio jedoch neu starten oder die Lösung neu laden (siehe Kommentare) , damit sie wirksam wird.
quelle
Wenn Sie sich diese
.targets
Datei ansehen, gibt es eine andere Möglichkeit, dies zu tun, wenn Sie weder eincheckenNuGet.exe
noch jedes Mal herunterladen möchten . Die Schlüsselzeile lautet:<NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath>
Gemäß der MSBuild-Konvention, Eigenschaften nur festzulegen, wenn sie noch nicht definiert wurden, wird standardmäßig die lokale Kopie der Lösung verwendet
NuGet.exe
, die heruntergeladen wird, wenn dieDownloadNuGetExe
Eigenschaft vorhanden isttrue
. MSBuild-Eigenschaften können jedoch von Umgebungsvariablen überschrieben werden.Wenn Sie bereits NuGet zu einem zentralen Standort heruntergeladen haben , können Sie verlassen
DownloadNuGetExe
auffalse
und eine Umgebungsvariable definieren aufgerufenNUGETEXEPATH
, die stattdessen verwendet werden.quelle
Aktivieren Sie die NuGet-Paketwiederherstellung
Klicken Sie mit der rechten Maustaste auf die Lösung und wählen Sie NuGet Package Restore aktivieren
quelle
nuget.exe
wenn es fehlt.