NuGet包不会打包输出目录中的所有文件。我错过了什么?

时间:2012-03-09 03:43:58

标签: nuget nuget-package

我正在尝试从.csproj创建一个NuGet包。我已成功编译项目,输出文件夹包含所有必需的文件(我的程序集及其所有依赖项)。但是,NuGet似乎只是将.csproj创建的程序集放入包中而不是它的任何依赖项。我的命令行如下所示:

nuget pack MyProject.csproj -Property Configuration=Release

我生成的.nupkg文件只有我的程序集在lib文件夹中。我已成功让NuGet为其他项目工作,但恰好这个项目正在引用Enterprise Library日志记录块,但它没有通过NuGet检索。我不确定这是否与我的问题有关。

有关它为什么不接受依赖关系的任何想法?

1 个答案:

答案 0 :(得分:4)

如果你需要自动保持你的nuspec文件是最新的,它实际上只是一个XML文件(我相信你知道)所以你可以使用一些非常好的工具从MSBuild自动创建nuspec /更新。开箱即用,MSBuild提供了一些可以更新或转换XML的任务,我使用了MSBuild社区任务来自定义初始的nuspec。例如,默认的nuspec包含一些我不需要的带有broilerplate的行,所以我使用XmlUpdate任务来删除它们。

虽然我没有考虑过扫描csproj文件中的非nuget引用,但我认为通过一些研究可能有可能。以下是描述我使用NuGet自动化体验的博客条目的一些链接,它们可以帮助您抢占先机:

Creating Packages with NuGet the MSBuild Way - 本文包含一些基本的NuSpec更新,因为所描述的包与NuGet已经知道如何自动化的包类型没有什么不同。

Manage Your MEF Parts With Nuget - 本文包含一些更复杂的更新,以支持将MEF部件分发为仅运行时引用。

如果你计划这么做,不想搞砸MSBuild,或者只是想从1360之前版本的ProjectFactory.cs恢复你喜欢的行为,NuGet支持第三方扩展MEF。您可以进入源代码控制并获取您喜欢的早期代码,并创建一个提供该行为的自定义命令(例如custompack)。然后你可以在命令行中使用它,如下所示:

nuget custompack MyProject.csproj -Property Configuration=Release

我认为这是NuGet的一个非常酷的方面,但我还没有玩过它。这篇文章解释了如何做到这一点:

Extend NuGet Command Line

所以尽管David提到NuGet并不是为了支持这种情况而设计的,但如果情景对于是正确的,那么你可以通过这条路线来扩展NuGet以满足你的需求。