我有以下设置:
现在,当我跑
时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知道这个本地存储库?
非常感谢!
答案 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包。