Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NuGet pack未打包输出目录中的所有文件。我错过了什么?_Nuget_Nuget Package - Fatal编程技术网

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

NuGet pack未打包输出目录中的所有文件。我错过了什么?,nuget,nuget-package,Nuget,Nuget Package,我正在尝试从.csproj创建一个NuGet包。我已经成功编译了项目,输出文件夹包含所有必要的文件(我的程序集及其所有依赖项)。然而,NuGet似乎只是将由.csproj创建的程序集放入包中,而不是它的任何依赖项中。我的命令行如下所示: nuget pack MyProject.csproj -Property Configuration=Release 生成的.nupkg文件在lib文件夹中只有我的程序集。我已经成功地让NuGet为其他项目工作,但碰巧这个项目引用了企业库日志块,但它没有通过

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

nuget pack MyProject.csproj -Property Configuration=Release
生成的.nupkg文件在lib文件夹中只有我的程序集。我已经成功地让NuGet为其他项目工作,但碰巧这个项目引用了企业库日志块,但它没有通过NuGet检索到。我不确定这是否与我的问题有关


你有没有想过为什么它不能获取依赖项?

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

虽然我还没有研究过扫描csproj文件中的非nuget引用,但我认为只要做一点研究就可以了。以下是一些博客文章的链接,介绍了我在NuGet automation方面的体验,它们可能会帮助您抢占先机:

-本文包括一些基本的NuSpec更新,因为所描述的包与NuGet已经知道如何自动化的包类型没有太大区别

-本文包括一些更复杂的更新,以支持将MEF部件作为仅运行时引用分发

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

nuget custompack MyProject.csproj-属性配置=Release

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


因此,尽管David提到NuGet并不是为支持此场景而设计的,但如果该场景适合您,那么您可以通过此途径扩展NuGet以满足您的需要。

我了解了更多有关此场景的信息。显然,在版本1360中,ProjectFactory.cs从获取输出目录中的所有文件更改为仅从输出目录获取项目输出。事实证明,我的其他软件包只是出于纯粹的愚蠢运气。在这些情况下,我的依赖项的名称恰好以与项目输出名称相同的字符串开头。我可以通过使用将缺少的依赖项添加到.nuspec中来修复我的问题,但这意味着如果项目的依赖项发生更改,那么我需要记住手动更新.nuspec。一定有更好的办法。我错过了什么?当依赖项不是来自NuGet时,其他人如何确保给定的包具有所有必需的依赖项?根据设计,获取输出目录中的所有内容是不正确的,因此我们选择了较小的错误。有些项目将所有输出二进制文件放在同一个文件夹中(有些项目我们特别维护)。感谢您在扩展NuGet命令行时给出的提示。我不知道这是一个选择