NuGet:pack命令不包括nuget依赖项

时间:2012-02-23 15:24:58

标签: dependencies package nuget

我有以下设置:

  • nuget.exe版本:1.6.21205.9031
  • 项目A.csproj打包到A.1.0.0.0.nupkg中,并发布到我本地IIS上托管的LOCAL包存储库(我的VS Nuget扩展我能够将A包添加到新项目中)
  • 项目B.csproj依赖于我使用VS Nuget Extension
  • 添加的A-package

现在,当我跑

nuget spec

创建了B.nuspec。

然后我跑

nuget pack B.csproj -verbose

但是在创建的B-package中,它们与A-package无依赖关系。 nuget pack命令告诉我它已找到packages.config文件(其中包含对A-package的依赖性),但随后它显示“Dependencies:None”。

我缺少什么?可能问题是A-package只能在我的本地软件包存储库中找到?如何让nuget.exe知道这个本地存储库?

非常感谢!

5 个答案:

答案 0 :(得分:14)

nuget pack需要能够找到packages文件夹才能解析依赖关系(请参阅http://nuget.codeplex.com/workitem/3097),与.csproj位于同一文件夹中(只要有一个.sln文件位于其上方一级)或NuGet.Config中指定的文件夹。

答案 1 :(得分:3)

我想我可能已经想到了......

我们的图书馆解决方案已启用Nuget Package Restore。我关闭了NuGet Package Restore,之后在创建NuGet包时包含了项目依赖性。

我不确定为什么在打开Package Restore时包中没有包含依赖项,但是很好:)。

答案 2 :(得分:1)

'Nuget.exe spec A.csproj'将创建一个非常瘦的NuSpec文件,该文件不具有任何依赖性。对于我们的流程,请使用powershell脚本将项目引用和其他依赖项从项目的packages.config添加到<dependency>中的B.nuspec节点。

'Nuget.exe pack A.nuspec'将是正确的。

答案 3 :(得分:1)

类似的问题被问到here,答案解释了:

这些导致问题的原因是因为NuGet查找解决方案级别包文件夹以确定要引入哪些包依赖项(不太确定如何进行此确定)。如果该包文件夹的路径不正确(如果NuGet使用错误的解决方案文件那样),那么它无法正确解析依赖关系。此外,如果packages文件夹为空,则它也无法正确解析依赖项。

我遇到了同样的问题,并将解决方案文件添加到项目文件夹(之前没有解决方案)帮我解决了这个问题。

答案 4 :(得分:1)

我缺少依赖项,因为我在*.nupkg文件夹中没有包含我正在使用的所有软件包的packages个文件。

这很难追查,因为nuget pack的输出看起来很有效:

Found packages.config. Using packages listed as dependencies

我一直在使用GitHub's Visual Studio .gitignore,只注释了一行关于&#34; Package Restore&#34; (因为我想提交我的包),但我应该注释掉两个。它应该是这样的:

# NuGet Packages
# *.nupkg
# The packages folder can be ignored because of Package Restore
# **/packages/*

感谢Rick Mohr's answer链接到CodePlex work item 3097,其中feiling解释了如何使用packages文件夹:

  

由于packages.config仅包含一个包列表,因此不包含   包含那些包之间的依赖关系,nuget需要   访问这些包文件以获取依赖项信息。这就是为什么   需要知道包文件夹。

feiling引用的依赖关系信息位于*.nupkg个文件中。一旦我更改了.gitignore并提交了所有丢失的*.nupkg文件,我的TeamCity构建服务器就能够成功创建具有正确依赖关系的NuGet包。