[英]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.