.net core 如何递归地打包.NET核心项目,而不在整个解决方案上运行pack?

.net core 如何递归地打包.NET核心项目,而不在整个解决方案上运行pack?,.net-core,nuget,.net Core,Nuget,我有100多个.NET核心项目的解决方案。并不是所有的项目都需要打包,只需要打包一些特殊项目的可传递依赖项 但是,当我运行dotnetpack时,它会尝试打包所有不应该打包的项目,并且会出现一些错误。相反,我希望以递归的方式在特殊项目上运行pack,以便只打包这些项目及其可传递的依赖项(当然是项目引用) 我想我可以通过围绕dotnet list reference命令编写脚本来实现它,但听起来不太正确。一定有更好的办法 编辑1 解决方案必须在命令行上运行,其中有dotnet和msbuild,可能

我有100多个.NET核心项目的解决方案。并不是所有的项目都需要打包,只需要打包一些特殊项目的可传递依赖项

但是,当我运行
dotnetpack
时,它会尝试打包所有不应该打包的项目,并且会出现一些错误。相反,我希望以递归的方式在特殊项目上运行pack,以便只打包这些项目及其可传递的依赖项(当然是项目引用)

我想我可以通过围绕
dotnet list reference
命令编写脚本来实现它,但听起来不太正确。一定有更好的办法

编辑1


解决方案必须在命令行上运行,其中有dotnet和msbuild,可能还有nuget,但没有VS IDE。

您可以在
dotnet build
期间修改项目设置以生成*.nupkg文件,而无需显式调用
dotnet pack
。当“父”项目生成时,一旦依赖项自动生成,当您仅为“父”项目运行
dotnet build
时,您将收到为所有依赖项准备的nuget包

对于应生成nuget包的每个项目,请将以下行添加到csproj文件中:


真的

或者,您可以在项目属性(“包”选项卡)中启用Visual Studio中的复选框“在生成时生成NuGet包”-这将在项目文件中添加相同的行。

dotnet pack的文档称它首先生成“dotnet生成”。对我来说,“dotnetbuild”首先构建(如果需要)所有依赖项。您真的确定在单个项目上运行“dotnet pack”不会生成引用的项目吗?可能它们已经生成并且使用了以前的生成结果?实际上,所有依赖项目都已生成,但打包的只是您在命令行中指定的项目。建筑和包装是两件不同的事情。此外,您可以运行dotnetpack——不构建,也不会构建任何内容。只打包。啊,你想打包所有相关的“可打包”项目吗?错过了。选中项目属性(包选项卡)中的“在生成时生成nuget包”。它在“dotnet构建”期间创建.nupkg文件。我在哪个项目上检查这个?我有一百多个项目。并不是所有这些都是我想打包的特殊项目的依赖项。在每个项目上都应该是“可打包的”。比如说,你有项目A、B、C和D;B和C依赖于A;和D取决于C。您想构建包D,在此期间您想打包C,但不想构建\pack B,因为它已损坏。您在B、C和D处设置“生成构建时的nuget”,然后为D运行“dotnet构建”。要构建它,dotnet将自动“dotnet构建”A和C。因此,您将构建A、C和D,我不接受它作为答案的唯一原因是,在一个包含100多个项目的解决方案中,手动标记特殊项目的依赖关系是非常繁琐的。倾向于将其放在Directory.Build.props中,但所有项目都会生成nupkg,有些项目会生成恼人的NuGet警告。此外,这种方法不允许在没有打包的情况下进行构建。所以,绝对是一个向上投票,但我希望有一个更好的方法。你不需要在100个项目中“标记依赖项”。您应该标记在构建时应打包的项目(即标记所有类库,但不标记控制台项目、webapps等)。然后您构建一个“顶级”应用程序,它的所有“标记”依赖项也将自动打包。