【问题标题】:Azure DevOps Pipeline Build fails missing DLL reference in GACAzure DevOps Pipeline Build 无法在 GAC 中缺少 DLL 引用
【发布时间】:2020-02-26 14:44:06
【问题描述】:

我们已将 TFS 服务器升级到 Azure DevOps,我正在为一个解决方案创建管道构建,该解决方案包括 3 个项目,其中 2 个编译为 DLL 和一个 Web 服务。目前构建失败并出现此错误:

> ##[error](XXX).sln\(XXXproject)\XXXpath\XXX.cs(8,30): Error CS0234: The type or namespace name 'Common' does not exist in the namespace
> 'XXXX' (are you missing an assembly reference?)

该行引用驻留在 GAC 中的 DLL(在另一个解决方案/项目中编译),因此当它尝试构建时当然找不到它。

我研究了错误,一个建议是在尝试构建当前解决方案之前使用下载构建工件任务从其他工件下载参考 DLL...但我不知道目标目录应该用于什么下载构建工件任务,以便我当前的构建将找到它。

或者有没有更好的方法来解决这个问题?

谢谢

【问题讨论】:

  • 它是哪个 DLL?也许你可以使用 NuGet 来下载它。
  • Shayki,它不是系统 DLL,它是我们自己的另一个项目生成的 DLL……它必须是该 DLL 的最新版本……所以我想避免每次更改时都必须打包。
  • 根据错误信息,如您所说,缺少一个自定义 DLL,那么使用下载构建工件应该是从特定构建中获取目标 DLL 的方法。生成目标 DLL 的这个构建是否与当前构建不同,并且下载构建工件不在您当前的构建中?如果是这样,请将任务放在当前构建中,以便当前构建可以找到下载的工件,并且您可能需要在上一个构建中发布构建工件任务。如果我误解了什么,请随时告诉。
  • 谢谢杨,我认为你对情况有很好的理解......你是正确的,DLL来自一个版本,它被第二个版本引用,找不到它...我唯一要补充的是,第二个版本正在寻找来自第一个版本的 DLL 以在 GAC 中...第一个版本在 GAC DLL 的后期构建中有一个 gacutil.exe 命令,但它失败并出现此错误:“将程序集添加到缓存失败:需要管理员权限才能使用所选选项。使用管理员命令提示符来完成这些任务。”
  • 抱歉因为放假很久没有回复。正如您在文档Gacutil.exe (Global Assembly Cache Tool) 中看到的,需要管理员权限,而 Azure Devops 服务无法提供。您是否可以发布从您第一次构建生成的 dll 并在第二次下载它并将其复制(复制文件任务)到您的 Web 服务参考文件夹,它存储所有需要的 dll?

标签: build azure-devops jenkins-pipeline gac


【解决方案1】:

对我来说,这是因为引用的 dll 超过 100mb,而我使用的是 git lfs。在经典管道编辑器中,源选项卡上有一个用于签出 git lfs 文件的复选框。对于 YAML,拉取时是一个选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2020-05-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    相关资源
    最近更新 更多