【问题标题】:ILMerge task was not found - Azure DevOps Build Pipeline未找到 ILMerge 任务 - Azure DevOps Build Pipeline
【发布时间】:2020-01-15 12:20:07
【问题描述】:

我遇到了 Azure 构建管道设置问题。 “构建解决方案”任务失败并出现以下错误。

[错误]Source\Libraries\PluginCore\PluginCore.csproj(129,5):错误 MSB4036:未找到“ILMerge”任务。检查以下内容:1.)

项目文件中任务的名称与 任务类。 2.) 任务类是“公共的”并实现 Microsoft.Build.Framework.ITask 接口。 3.) 任务正确 在项目文件或 *.tasks 文件中声明 位于“C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin”目录。

我尝试在构建管道中添加“ILMerge”任务,但找不到任何具有该名称的任务。我无法避免使用 ILMerge,因为我必须合并辅助类 dll。有没有人遇到这个问题并得到解决?请分享您的意见

【问题讨论】:

  • 请提供您的 XML 文件以供审核。
  • 您的错误消息中的任务意味着 msbuild 任务而不是 Devops 任务,因此您无法在管道中找到它。

标签: azure-devops


【解决方案1】:

错误 MSB4036:未找到“ILMerge”任务。

我尝试在构建管道中添加“ILMerge”任务,但我不能 找到任何具有该名称的任务。

这里的任务是指msbuild tasks 而不是devops tasks,它们是不同的东西。错误消息表明您在项目文件(xx.csproj) 中调用了一个名为 ILMerge 的任务,而此任务未定义或找不到。

在这里查看Msbuild Task Reference,我们可以发现ILMerge 任务不是来自msbuild 的预定义任务。为此,如果您的项目文件中有此内容:

  <Target Name="Test" AfterTargets="build">
    <Message Text="Test starts..." Importance="high" />
    <ILMerge /> <!--This is the direct cause of your issue.-->
  </Target>

你现在会得到:

要解决该错误消息:

您应该删除PluginCore.csproj 的第129 行中的&lt;ILMerge ... /&gt;。或者您必须确保在项目文件中引用了相应的程序集,以便您可以使用该程序集中的 ILMerge 任务。

参见Task writing,一个 msbuild 任务实际上是一个实现 ITask 接口或派生自 Task 类的类。因此,如果您有一个自定义或第三方程序集在代码中定义了 ILMerge 任务(类),您仍然可以使用任务。那么您的问题可能是由于您没有将该程序集添加到课程控制中或成功恢复包含该程序集的 nuget 包。

有许多 nuget 包可能包含与 ILmerge 相关的任务,例如 onetwothree

1.如果您没有任何包含ILMerge 的自定义程序集,则出现该错误是预期的行为,因为它不是预定义的任务。你可以检查上面的 nuget 包来做 IlMerge 工作。

2.如果该构建在本地运行良好,则仅在 Devops 管道中解决问题。然后确保在构建任务之前已恢复包含程序集(定义 ILMerge 类的 dll)的 nuget 包。或者如果您不使用 nuget 包方式,请确保您已在源代码管理中添加程序集(不推荐)。

【讨论】:

    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2020-03-02
    • 2020-05-01
    • 2020-12-18
    相关资源
    最近更新 更多