【问题标题】:Create NuGet package from multiple projects, including NuGet dependencies从多个项目创建 NuGet 包,包括 NuGet 依赖项
【发布时间】:2015-01-23 10:36:07
【问题描述】:

我有一个解决方案,我想从两个项目中创建一个 NuGet 包。

如果只是一个项目,我会使用 .csproj 文件来指定 NuGet 打包器,但由于我希望将两个不同的项目放入完成的包中,所以我不能这样做。

我创建了一个引用来自两个项目的 DLL 的 NuSpec 文件,然后在命令行中使用 -IncludeReferencedProjects 开关将其打包。这包括来自同一解决方案的引用项目,但不包括作为项目中依赖项的任何 NuGet 包。

我尝试在另一个解决方案中引用新的 NuGet 包,该解决方案已构建并运行,但在运行时遇到了 FileNotFoundException,因为它正在从我刚刚创建的 NuGet 包中的依赖项的 NuGet 包中查找 DLL。

我意识到我可以在 NuSpec 文件中包含 NuGet 依赖项,但是当我的一个项目添加另一个 NuGet 引用时,这将变得过时。

是否可以设置 NuSpec 文件,以便它使用我的两个项目中的 .csproj 文件并正确设置 NuGet 依赖项,即使项目已使用新的 NuGet 依赖项进行更新?

【问题讨论】:

  • 您能描述一下您的项目之间的关系吗?一个项目是否引用了另一个项目?另外,解决方案中是否只有两个项目,或者还有更多,您还需要打包它们?
  • 一个引用另一个。解决方案中还有其他项目,但它们不需要作为包的一部分。但是,如果它们被包中包含的项目引用,则可以通过在打包包时使用 -IncludeReferencedProjects 参数来解决。问题不在于解决方案内的引用,而在于确保正确引用了所有必需的 NuGet 包。

标签: nuget nuget-package


【解决方案1】:

嗯,据我了解,您有两个项目,foo.csproj 和 bar.csproj。 foo 引用 bar。

您应该使用nuget pack foo.csproj -IncludeReferencedProjects(请注意,pack 命令应用于 foo)因为IncludeReferencedProjects 选项还会添加引用项目的依赖项。
这导致 foo.dll 和 bar.dll 都出现在 foo 包的 lib 文件夹中。此外,foo 和 bar 依赖项都将出现在 dependencies 元素下。

【讨论】:

  • 我不知道为什么我之前测试时没有包含依赖项。我想我一定做错了什么,比如从 bar 而不是 foo 打包。再加上将 .csproj 文件与 .nuspec 文件相结合的技巧(详见此处stackoverflow.com/questions/14797525/…),可以完全按照我的意愿行事。
猜你喜欢
  • 2019-03-19
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 2020-07-29
  • 2012-03-14
  • 1970-01-01
相关资源
最近更新 更多