首页 > 解决方案 > Azure DevOps Build 缺少程序集参考

问题描述

我在 Azure DevOps 上有一个构建过程,我已经成功构建了一段时间。

最近我的一位开发人员添加了一个包含 MVC 库的页面

using System.Web.Mvc

但是,当我通过 Azure DevOps 构建代理构建它作为 CI/CD 流程的一部分时,构建现在一直失败。

ClassName.cs(5,18):错误 CS0234:命名空间“System.Web”中不存在类型或命名空间名称“Mvc”(您是否缺少程序集引用?)

如果我在自己的笔记本电脑上使用 Visual Studio 2017 手动编译,或者如果我在运行 Azure DevOps 构建代理的构建机器上使用 Visual Studio 2017,它就会编译。

我尝试解决的步骤:

我不知道为什么它在 Visual Studio 上手动编译但是当我通过 x64 位上的 MS Build 使用构建代理编译时出错。

标签: c#visual-studiomsbuildazure-devops

解决方案


我试图通过比较两个新的 ASP.NET Web 应用程序 (.NET Framework) 项目来重现您的错误,一个是使用空模板创建的,另一个是使用 MVC 模板创建的。MVC 项目带有 System.Web.Mvc 引用,而空的没有,因此我在手动添加对空项目的引用时提出了额外的故障排除步骤。

  • 确保构建失败的项目文件包含对包含路径的 Microsoft.AspNet.Mvc 包的引用(使用您的最新版本)
    <Reference Include="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.4\lib\net45\System.Web.Mvc.dll</HintPath>
    </Reference>

您可以从新创建的 MVC 模板中复制它和它。只有在之前生成了构建工件时,隐式引用<Reference Include="System.Web.Mvc" />才会起作用,这可能是构建成功开发和构建管道失败的一个很好的理由。

  • 清理解决方案,关闭 Visual Studio 并删除所有bin文件obj夹,以确保您的构建不成功,因为以前的那些,并且 Visual Studio 不会重新生成它们。

  • 使用开发人员命令提示符调用msbuild.exe项目文件夹,这将是一个与您的构建管道更相似的环境,而不是使用 Visual Studio 构建


推荐阅读