gpt4 book ai didi

nuget - 使用nuget.exe命令行安装依赖项

转载 作者:行者123 更新时间:2023-12-03 14:20:39 28 4
gpt4 key购买 nike

我想在我的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编辑器中从中安装A时,也会安装B(这应该发生)。

仅安装A时(仅在packages.config中放入A)如何使用nuget.exe并安装依赖项B。

谢谢

最佳答案

这是不可能的。 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的硬调用

关于nuget - 使用nuget.exe命令行安装依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17187725/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com