匹配模式在NuGet Packager中不起作用

时间:2017-08-15 10:35:12

标签: nuget azure-devops nuget-package azure-pipelines

我的git源文件夹及其子文件夹中有多个.csproj文件。我想为所有人创建NuGet包。如果我理解正确,我应该添加NuGet Packager构建步骤并配置其路径到csproj或nuspec文件以打包

  

** \ *。的csproj

但是在运行构建时没有创建包。 顺便说一句,如果我手动选择一些“csproj'文件使用" ..."按钮和运行构建然后将创建它的包。

有人可以解释为什么我不能使用** \ * .csproj匹配模式为源目录及其子目录中的所有项目创建包吗?嵌套级别有什么限制吗?至少我有几个csproj文件在最大嵌套级别4-5从源文件夹... ...

P.S。我知道Exclusion pattern not working for vsts build存在类似的错误,所以我想知道它是否是一个相关的问题?

请参阅我的构建配置和我的NuGet Packager和NuGet Publisher构建步骤的日志,其中D:_work \ 3 \ s是构建服务器上找不到csproj文件的文件夹。虽然我可以在那里看到文件,例如第一个在D:_work \ 3 \ s \ Source \ Product \ Components \ Folder1 \ MyProj1.csproj,第二个在D:_work \ 3 \ s \ Source \ Product \ Components \ Folder2 \ MyProj2.csproj等... enter image description here enter image description here

2 个答案:

答案 0 :(得分:0)

嵌套水平不应成为问题。我能够在不同级别设置一个包含3个项目的测试项目,单个NuGet Task为所有这些项目创建了一个NuGet包。

这是我使用的配置(这是此时的默认配置)。这是使用任务的2.x版本完成的,因此如果您使用的是早期版本,则可能需要升级。

Nuget Pack

通过在对构建进行排队时设置system.debug = true,您还可以准确地查看此步骤中发生的情况。执行此操作后,您可以查看Nuget Pack步骤的日志,您应该看到它遍历所有目录和子目录并标记匹配的目录。在这里你可以看到它找到了,然后继续打包这三个项目。

发布您的详细设置并在此处记录,如果您仍需要其他帮助。

VSTS Output Log

答案 1 :(得分:0)

我有一个类似的问题。 NuGet Pack任务成功完成,但未创建NuGet包。 在任务日志记录中(使用debug = true运行时),我看到以下内容:

...
##[debug]found 8037 paths
##[debug]applying include pattern
##[debug]0 matches
...

NuGet Pack任务不会创建包,因为它找不到任何.csproj.nuspec文件。在我的情况下,找不到任何.csproj.nuspec文件的原因是因为我的构建代理的工作文件夹设置为"."。我在分析NuGet Pack任务的日志中的模式时发现了这一点。

...
##[debug]pattern: 'D:\Agents\agent_1\.\123\s\*.nuspec'
...

此问题的解决方法是更改​​构建代理程序workFolder文件中的.agent。您可以在构建代理的根文件夹(例如D:\Agents\agent_1\.agent)中找到该文件。最初是:

{
  "agentId": 48,
  "agentName": "agent_1",
  "poolId": 3,
  "serverUrl": "<TFS url>",
  "workFolder": "."
}

您必须将其更改为

{
  "agentId": 48,
  "agentName": "agent_1",
  "poolId": 3,
  "serverUrl": "<TFS url>",
  "workFolder": "D:\\Agents\\agent_1"
}

请确保在更改此文件后重新启动构建代理Windows服务!

希望这会有所帮助:-)