如果csproj没有变化,是否可以不输出nuget包?

Is it possible not to output nuget package if there is no change in csproj?

我有一个包含多个 csproj 的 sln 文件。我们有一个 CI/CD 管道(yml 文件),我必须在其中提及我想将 nugets 推送到存储库的所有 (csproj) 项目。管道基本上选择那些 csproj,然后 运行 dotnet pack 命令在给定目录中设置输出。之后它 运行 dotnet push 该目录中的所有 nuget pkgs。

我在那个 yml 文件中添加了我所有的 csproj。我以前只修改我进行更改的csproj中的版本。在所有 csproj 上使用构建管道调用 dotnet pack 和 dotnet push - 所以我没有进行任何更改的项目过去常常在存储库中被相同版本覆盖。生活对我来说是美好的。

现在存储库团队决定他们将使 nugets 不可变。这意味着我不能再将相同版本的 nuget 推送到 repo,如果我尝试它将构建失败。

现在我有两个选择-

  1. 我在 yml 文件中评论了所有 csproj,在每次构建之前,我必须取消注释我想发布到存储库的 csproj
  2. 为所有 csproj 添加构建号作为补丁版本,所以每次我 运行 构建它都会产生一个唯一的版本。这也意味着我将推出新版本没有变化的 nugets。

如果dotnet pack没有为没有改变的项目在输出目录中生成任何包,dotnet push 将不会推送它们,生活会再次美好。

我的问题: 我可以在 csproj 中放置一些逻辑吗,所以当 运行 dotnet pack 命令时,它不会 return 任何错误,并且不会根据 csproj 中的版本更新在输出目录中生成任何包.

您可以参数化您的管道,并有条件地运行 每个项目的 dotnet push 命令。或者应用 —skip-duplicate 参数所有项目 docs.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-push