从Azure DevOps中的dotnet pack任务中排除项目

时间:2019-08-14 23:30:42

标签: azure-devops azure-pipelines-build-task

我有一个VS解决方案文件(.sln),其中包含.net标准库和测试项目。现在,该项目有一个针对.net Framework 4.7.2的集成测试项目。

我当前的构建管道执行以下操作 网络构建 网络包 点网推送

使用dotnet包,我试图排除项目Integration.Tests.csproj。

我当前的文件夹结构如下

CompanyName.Service\CompanyName.Service.csproj
CompanyName.Data\CompanyName.Data.csproj
Integration.Tests\Integration.Tests.csproj

根据包含/排除路径中的帮助器工具提示,我们可以像下面这样

**/*.csproj;-:**/*.Tests.csproj

enter image description here

但是,dotnet pack任务只是不忽略Integration.Tests.csproj。它尝试打包,但失败。我不确定自己在做错什么,或者这是否与任务有关。到目前为止,我还没有找到任何已知的问题。

注意:在将该项目包含在我的解决方案中之前,管道可以很好地将项目打包并发布到nuget。

2 个答案:

答案 0 :(得分:1)

如果在Azure Devops中使用dotnet任务的版本(2.x),则应使用!而不是-:

因为排除模式已更改。这些模式已在NuGet任务的版本2中更新;如果您的模式包含-:,请改用!

Pack NuGet packages

enter image description here

作为测试,它在我这边工作正常。

我的文件夹设置:

enter image description here

注意:如果您仍然对该任务有疑问,请检查该错误是否是由于运行该任务时未打包而引起的。或者,您可以选择选项不构建

enter image description here

但是您应该在打包项目之前先构建项目。

答案 1 :(得分:0)

除了仅包含必要的文件(一个)之外,您还可以修改管道以仅构建所需的资源(两个)。详情:

一)这就是你的问题的主要答案:打包操作会包含依赖,所以你只需要打包主项目即可。在下图中,您可以在黄色中看到包主项目的路径和文件名(不要猜测,点击阅读箭头指向的按钮来浏览它)。如前所述,依赖项将自动包含在内。您不需要明确包含它们。这还包括所需的 Nuget 包,它们作为依赖包包含在内。

nuget pack properties

二) 默认情况下,构建配置定义在管道的 $(BuildConfiguration) 变量中,通常是 Release(上图,绿色)。如果要节省管道中的计算工作和时间,可以在 Visual Studio 中创建新的解决方案配置。您可以在下方看到已创建的解决方案配置,名称为 Package。创建它:

  • 在配置管理器中,点击 <New...>(下方绿色)
  • 指定配置名称 (Package)
  • 选择项目的配置(发布或调试)或创建一个新项目。仅当您的项目需要为打包做一些特殊的事情时(例如,如果您有配置转换),创建一个新的才有用。在示例中,主项目具有 Package 配置。
  • 在配置中指定需要构建的项目。包括主项目及其依赖项。在此示例中,主项目不依赖于其他项目,因此它是 Build 列中唯一选中的项目。您通常会排除测试项目、概念验证和此类项目。
  • 最后一步是在管道本身中:直接在第一个快照的绿色文本框中指定解决方案配置 (Package),或作为该变量的值,在 Variables 选项卡中管道的 enter image description here

如果这样做,只会编译需要的项目,所有依赖项都会包含在包中。