![](/img/trans.png)
[英]Nuget.exe Install — Microsoft.CSharp already has a dependency for System.Dynamic.Runtime
[英]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.