2013-06-19 9 views
17

Chcę użyć nuget.exe (wersja 2.5) w moim kompilacji budowania CI, aby zainstalować pakiet, który jest zależny od innego pakietu.przy użyciu wiersza polecenia nuget.exe do zainstalowania zależności

Mam następujące pliki Nuspec.

<?xml version="1.0"?> 
<package> 
    <metadata> 
    <id>A</id> 
    <dependencies> 
     <dependency id="B" version="1.0.0.1" /> 
    </dependencies> 
    </metadata> 
    <files> 
    <file src="A.dll" target="lib" /> 
    </files> 
</package> 

i podobny do B. i moim pliku packages.config której użyłem do instalacji to:

<packages> 
    <package id="A" version="1.0.0.1" allowedVersions="[1,2)"/> 
</packages> 

i uruchomić następujące polecenie:

NuGet.exe install packages.config -ExcludeVersion -Outputdir libs -source http://get.nuget.mydomain 

dostaję komunikat:

Successfully installed 'A 1.0.0.1'. 

, ale nie zainstaluj mojej zależności B.

Ale jeśli umieścisz B osobno w pliku packages.config, otrzymam instalację A i B. Spodziewałem się, że B zostanie zainstalowane, gdy instalujemy A, ponieważ jest to zależność A. Nie umieszczamy bibliotek dll w GAC (więc uważam, że rozwiązywanie zależności nie powinno stanowić problemu). Również otworzyłem A.nupkg i sprawdziłem, że jest ma tam wymienioną zależność. Również gdy instaluję A z w edytorze Visual Studio B, instaluje się również. (Co powinno się stać).

Jak używać nuget.exe i instalować zależność B, gdy instaluję tylko A (umieść A tylko w packages.config).

dziękuję

+0

I utworzyłem problem na nuget.codeplex.com, który nie jest twoim dokładnym problemem, ale też rozwiązałby go, używając nieco innego workflow: https://nuget.codeplex.com/workitem/4258 – theDmi

Odpowiedz

7

To nie jest możliwe. Zachowanie pliku packages.config jest zgodne z projektem. Instalowane są tylko rzeczy określone w pliku packages.config, a nie ich zależności. Wszystkie zależności również muszą być jawnie określone.

Jeśli spojrzeć na kod źródłowy widać, że nuget.exe zainstalować packages.config (http://nuget.codeplex.com/SourceControl/latest#src/CommandLine/Commands/InstallCommand.cs) wykorzystuje PackageExtractor.InstallPackage (http://nuget.codeplex.com/SourceControl/latest#src/CommandLine/Common/PackageExtractor.cs):

public static void InstallPackage(IPackageManager packageManager, IPackage package) 
    { 
     var uniqueToken = GenerateUniqueToken(packageManager, package.Id, package.Version); 
     // Prerelease flag does not matter since we already have the package to install and we ignore dependencies. 
     ExecuteLocked(uniqueToken,() => packageManager.InstallPackage(package, ignoreDependencies: true, allowPrereleaseVersions: true)); 
    } 

Uwaga dysk wezwanie do ignoreDependencies: true

Powiązane problemy