从多个项目中创建NuGet包,包括NuGet依赖项

6
我有一个解决方案,想要从两个项目中创建一个NuGet包。
如果只是一个项目,我会使用.csproj文件来指定NuGet打包程序,但由于我想要将两个不同的项目放入完成的包中,所以无法这样做。
我创建了一个NuSpec文件,引用了两个项目的DLL,然后在命令行中使用-IncludeReferencedProjects开关进行打包。这包括了相同解决方案中的引用项目,但不包括任何项目中的NuGet依赖项。
我尝试在另一个解决方案中引用新的NuGet包,该解决方案构建并运行,但在运行时遇到了FileNotFoundException,因为它正在寻找刚刚创建的NuGet包中的NuGet依赖项的DLL。
我意识到我可以在NuSpec文件中包含NuGet依赖项,但一旦我的项目添加了另一个NuGet引用,它就会过时。
是否可能设置一个NuSpec文件,使其使用我的两个项目的.csproj文件,并正确设置NuGet依赖项,即使项目更新了新的NuGet依赖项?

请问您能描述一下您的项目之间的关系吗?一个项目是否引用了另一个项目? 此外,解决方案中只有两个项目吗?还是还有其他项目需要打包? - Peas
一个引用另一个。解决方案中还有其他项目,但它们不需要作为包的一部分。然而,如果它们被包含在包中的项目所引用,那么可以通过在打包包时使用-IncludeReferencedProjects参数来解决这个问题。问题不在于解决方案内部的引用,而在于确保所有必需的NuGet包被正确引用。 - Petter Brodin
可能是在一个解决方案中从多个项目创建一个NuGet包的重复问题。 - Michael Freidgeim
1个回答

7

根据我理解,你有两个项目,foo.csproj和bar.csproj。foo引用了bar项目。

你应该使用nuget pack foo.csproj -IncludeReferencedProjects(注意,pack命令适用于foo),因为IncludeReferencedProjects选项还会添加所引用项目的依赖关系。
这将导致foo.dll和bar.dll都出现在foo包的lib文件夹中。同时,在dependencies元素下,foo和bar的依赖关系也会显示出来。


我不知道为什么在我之前测试时依赖项没有被包含。我猜我一定做错了什么,比如从bar打包而不是从foo。这个结合使用.csproj文件和.nuspec文件的技巧(详见https://dev59.com/-mUq5IYBdhLWcg3wF8hQ)使得我能够完全实现我想要的功能。 - Petter Brodin
@Peas 我也遇到了同样的问题,但是它没有生成预期的.nuspec文件并列出依赖项。这是我在Stack Overflow上的问题,其中包含所有细节和一个示例存储库以重现此问题:https://dev59.com/YncPtIcB2Jgan1znI1HK - VJSharp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接