无法在azure devops中构建asp.net应用程序

问题描述 投票:0回答:2

能够在本地构建应用程序,但是当我尝试在azure devops管道中构建时。它显示以下错误

我已经安装了 EntityFramework 并在 webconfig 文件中添加了 system.data.entity.design 程序集。不走运

Please find pipeline here

NuGet Restore task

webapp\CaseDatabase.DataAccess\CaseAssignmentModule\CaseQueueDbAdapter.cs(10,19): Error CS0234: The type or namespace name 'Entity' does not exist in the namespace 'System.Data' (are you missing an assembly reference?)
webapp\CaseDatabase.DataAccess\CaseAssignmentModule\HoursEstDbAdapter.cs(4,19): Error CS0234: The type or namespace name 'Entity' does not exist in the namespace 'System.Data' (are you missing an assembly reference?)
webapp\CaseDatabase.DataAccess\CasesModule\CaseWorkflowDbAdapter.cs(2,17): Error CS0234: The type or namespace name 'EntityFrameworkCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
webapp\CaseDatabase.DataAccess\ClientsAndContactsModule\ContactDefaultsDbAdapter.cs(5,17): Error CS0234: The type or namespace name 'EntityFrameworkCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
webapp\CaseDatabase.DataAccess\ClientsAndContactsModule\InstructionLibraryDbAdapter.cs(4,17): Error CS0234: The type or namespace name 'EntityFrameworkCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
webapp\CaseDatabase.DataAccess\DBEntityCoreModel\CaseDatabaseContext.cs(2,17): Error CS0234: The type or namespace name 'EntityFrameworkCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
webapp\CaseDatabase.DataAccess\DBEntityCoreModel\ICaseDatabaseContext.cs(2,17): Error CS0234: The type or namespace name 'EntityFrameworkCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
webapp\CaseDatabase.DataAccess\DBEntityCoreModel\ICaseDatabaseContext.cs(3,17): Error CS0234: The type or namespace name 'EntityFrameworkCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
webapp\CaseDatabase.DataAccess\DBEntityCoreModel\ICaseDatabaseContext.cs(4,17): Error CS0234: The type or namespace name 'EntityFrameworkCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
webapp\CaseDatabase.DataAccess\EntityRepository.cs(4,17): Error CS0234: The type or namespace name 'EntityFrameworkCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
azure-devops visual-studio-2019
2个回答
1
投票

根据@Stella 分享的构建日志,此错误消息应该是由包恢复路径引起的。

首先通过

Nuget restore
任务恢复相关包全部成功。而且,所需的所有软件包都已恢复。它恢复的文件夹位置是
D:\a\1\s\webapp\Websites\packages
与 Nuget.config 中定义的位置相同
..\packages

Visual Studio Build
日志中,有以下消息:

Considered "..\ThirdParty\NuGetPackages\EntityFramework.6.1.2\lib\net45\EntityFramework.dll", but it didn't exist.
***
***
Considered "..\ThirdParty\NuGetPackages\EntityFramework.6.1.2\lib\net45\EntityFramework.SqlServer.dll", but it didn't exist.
***
***
***

根据 Visual Studio Build 任务中显示的这些消息,您可以看到它正在文件夹路径下找到包位置

..\ThirdParty\NuGetPackages
。正常情况下,该路径由
<HintPath>... </HintPath>
控制。

现在,很容易知道导致的错误:构建期间找到的包位置与

Nuget restore
任务中实际包恢复的位置不匹配。

正常情况下,其默认位置应为

..\packages\...
,与
Nuget.config
中定义的默认位置相同。我假设它的本地存储库路径应该被更改,那么在
HintPath
文件中定义的
csproj
也会自动更改。但是,在 Nuget.config 中,其包默认位置仍然保持默认。这将导致当包恢复时,它遵循
Nuget.config
中定义的位置。但是在构建期间,由于它查找定义了
csproj
... 的包,因此构建无法知道实际包恢复的位置。然后导致这些错误消息。


要解决这个问题,有2个解决方案。

  • 在 Visual Studio 中重新安装包

运行以下命令重新安装所有包,这样

HintPath
就可以全部更改为默认位置
..\packages\...
,可以与Nuget.config中定义的同步。

Update-Package -reinstall

该解决方案的逻辑是撤销

HintPath
作为默认位置,从而可以与
Nuget.config
中的定义保持同步。

执行命令后,

HintPath
应该看起来像这样:

  • 修改
    Nuget.config
    文件

第二种解决方案的逻辑是修改Nuget.config

文件中的包位置定义
。使其与
HintPath
同步,此时恢复的包的位置将与构建时包的位置相同。

将以下脚本添加到 Nuget.config 文件中:

<configuration>
  <config>
    <add key="repositoryPath" value="xxxx" />
  </config>
  ... 
</configuration>

只需尝试一种解决方案,然后在本地 Visual Studio 中构建。成功后,然后推送到Azure Devops中,使用之前相同的任务配置进行构建,

use nuget
nuget restore
VS build
publish artifacts

希望这有帮助。


0
投票

我刚刚经历了同样的问题,尽管我以与其他接受的答案不同的方式解决了它: 出现 CS0234 错误的项目的实体框架包是 6.4.0。查看包依赖项,它清楚地表明“.NETStandard,Version=2.1”,并且事实证明,该项目是.NET 2.0。将版本降级到 6.2.0 就是 DevOps Pipeline 最终成功所需的一切。

这看起来是一个“显而易见”的解决方案,但这个遗留解决方案有超过 100 个警告,而且由于它是在本地构建/运行的,它让整个团队困惑了几个小时。我希望这可以帮助其他人节省一些时间!

© www.soinside.com 2019 - 2024. All rights reserved.