在管道中发布 NET 6 应用程序失败并出现“找不到类型”异常

Posted

技术标签:

【中文标题】在管道中发布 NET 6 应用程序失败并出现“找不到类型”异常【英文标题】:Publish NET 6 app in pipeline fails with "type not found" exception 【发布时间】:2021-08-27 17:03:27 【问题描述】:

我尝试发布我的 net 6 应用程序,但该部分管道在发布步骤中失败。首先,如果发布实际上调用了msbuild,为什么所有示例在发布之前都有一个构建步骤?

根据我发现的一个示例,我通过脚本调用 dotnet build 和此 PASSES。 MS 文档声明发布中的所有参数都传递给 msbuild。从下面开始,我使用完全相同的属性,但发布构建失败,出现一些“找不到类型”异常(错误 CS0246:找不到类型或命名空间名称“ValueTask”(您是否缺少 using 指令或程序集引用?))

我该如何解决这个问题?

作品

脚本:dotnet build --configuration $(buildConfiguration) --framework $(dotNetFramework) -t:restore /m:1 /nr:false displayName: '构建 .NET 6 应用程序'

失败;

脚本:dotnet publish --configuration $(buildConfiguration) --framework $(dotNetFramework) -t:restore /m:1 /nr:false --output $(Build.ArtifactStagingDirectory)' displayName: '发布 .NET 6 应用程序'

【问题讨论】:

【参考方案1】:

根据错误信息,您可以在 dotnet publish 脚本之前添加一个还原任务,并检查它是否可以工作。

例如:

steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'

- script: |
   dotnet publish  ConsoleApp1/ConsoleApp1.csproj --configuration $(buildConfiguration)  -t:restore /m:1 /nr:false --output $(Build.ArtifactStagingDirectory)'
   

  displayName: 'Command Line Script'

我建议你可以直接使用已有的dotnet task来替换script task。

例如:

steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  displayName: Publish
  inputs:
    command: publish
    publishWebProjects: false
    projects: '**/*.csproj'
    arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)'

如果发布实际上调用 msbuild,为什么所有示例在发布之前都有一个构建步骤?

关于这个问题,可以参考这张票:Why bother with dotnet build before dotnet publish?

【讨论】:

【参考方案2】:

您的构建服务器可能使用旧版本的 dotnet sdk。在使用“.Net Core”任务开始构建之前添加“Use .Net Core”任务。

确保将“Version”设置为“6.0.x”并选中“Include Preview Versions

steps:
- task: UseDotNet@2
  displayName: 'dotnet use'
  inputs:
    version: 6.0.x
    includePreviewVersions: true

【讨论】:

以上是关于在管道中发布 NET 6 应用程序失败并出现“找不到类型”异常的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data Mongo Embedded 测试失败并出现“无法识别的管道阶段名称:'$graphLookup'”

找不到配置文件“secrets.json”并且不是可选的(.NET 6)

.NET Core 发布的应用程序失败并出现 FileNotFoundException

asp.net 构建成功但发布失败并出现 System.OutOfMemoryException 错误

Worklight 推送通知 (APNS) 失败并出现 javax.net.ssl.SSLHandshakeException

从 TeamCity 构建 VC++ 6 项目。找不到头文件