簡體   English   中英

使用nuget.exe命令行安裝依賴項

[英]using nuget.exe commandline to install dependency

我想在我的CI構建管道中使用nuget.exe(版本2.5)來安裝一個依賴於另一個包的包。

我有以下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>

類似的B.和我以前安裝的packages.config文件是:

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

我運行以下命令:

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

我得到輸出:

Successfully installed 'A 1.0.0.1'.

但是不要安裝我的依賴關系B.

但是如果將B單獨放在packages.config文件中,我會同時安裝A和B. 我希望在安裝A時安裝B,因為它是A的依賴項。我們不把dll放在GAC中(所以我認為依賴解析不應該是一個問題)。我也打開A.nupkg並檢查它是否有依賴列在那里。 此外,當我在Visual Studio編輯器B中安裝A時,也會安裝。(這應該是什么)。

如何僅在安裝A時使用nuget.exe並安裝依賴關系B(僅在packages.config中放置A)。

謝謝

這是不可能的。 packages.config文件的行為是設計使然。 僅安裝packages.config中指定的內容,而不是其依賴項。 還必須明確指定所有依賴項。

如果查看源代碼,您將看到nuget.exe安裝packages.config( http://nuget.codeplex.com/SourceControl/latest#src/CommandLine/Commands/InstallCommand.cs )使用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));
    }

注意對ignoreDependencies: true的硬調用ignoreDependencies: true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM