使用nuget.exe命令行来安装依赖关系

前端之家收集整理的这篇文章主要介绍了使用nuget.exe命令行来安装依赖关系前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在我的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时安装A,因为它是A的依赖。
我们不把dll放在GAC中(所以我认为依赖解决不应该是一个问题)。而且我已经打开了A.nupkg并检查是否有依赖列表。
另外当我在visual studio编辑器中安装A时,B也被安装了(这是应该发生的)。

当我安装A时,如何使用nuget.exe和安装依赖项B(仅将A放在packages.config中)。

谢谢

这不可能。 package.config文件的行为是设计的。只有在package.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

猜你在找的设计模式相关文章