c# - 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,它就会编译。
我尝试解决的步骤:
- 确保在我的项目的 NuGet 中,我有 Microsoft.Aspnet.MVC 最新版本。
- 我尝试
通过 NuGet 在构建机器上重新安装 Microsoft.Aspnet.MVC - 我验证了我的项目的默认包
管理格式是:Packages.config - 我验证了我的 packages.config 有< package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net472" />
- 我试图通过运行 Update-Package --reinstall 命令在我的构建机器上重新安装所有包。
- 我验证了在构建代理机器上我有 Microsoft.AspNet.Mvc 文件夹及其在 repositoryPath -
$(Solutiondir)/packages 和 globalPackagesFolder -
$(UserProfile).nuget\packages下的所有 dll
我不知道为什么它在 Visual Studio 上手动编译但是当我通过 x64 位上的 MS Build 使用构建代理编译时出错。
解决方案
我试图通过比较两个新的 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 构建
推荐阅读
- java - 如何在junit5中自定义测试并行的逻辑
- azure - 加载缓存时如何对 Azure 云服务 WebRoles 进行负载平衡
- build - 发布时如何定位特定的 .NET Core 运行时?
- kotlin - CollectionsKt.removeAll 是做什么的?
- javascript - 如何指定 Web MIDI 通道?
- vim - 在映射中使用“z=”
- jasmine - 说 Jasmine spy 没有被调用,但我可以看到它被调用
- security - OAuth 2.0 - 为什么同意屏幕不需要客户端密码?
- python - 按列排序和选择,同时在 python 中保留原始索引
- reactjs - history.push(path) 在 react-router-dom v4 中不起作用,在重定向到 404 时使用 redux