使用源生成器时 Azure 构建管道失败

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

我使用 .NET6 以来提供的 IIncrementalGenerator 接口创建了一个源生成器。当我在本地运行构建时,一切正常并且生成了我的文件。即使在运行本地 powershell 实例并运行 n

dotnet build
时,一切都会按预期运行。然而,一旦我将源生成器放入 PR 中,并配置了作为 PR 运行的构建管道,检查就会失败。从错误消息(例如“命名空间 XY 不存在于 ....”等)来看,源生成器似乎没有生成这些文件,因此导致了错误。

现在我在网上找到了一个已有三年历史的修复程序,它对我有用。解决方法是我在 csproj 文件中添加了以下代码行,其中我还引用了我的代码生成器。

<PackageReference Include="Microsoft.Net.Compilers.Toolset" Version="4.7.0" PrivateAssets="all">
          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageReference>

但是,该修复并不被认为是干净的,即使在它的 nuget 描述中,也提到您应该仅将其用作“修补程序”,而不是作为长期解决方案。

所以我需要找出如何以一种稳健的方式解决这个问题,这样它才能长期保持下去。由于我自己无法解决这个问题,所以我在这里发布这个问题。

我期待一种解决方案,它不会像上面的那样感觉很糟糕,并且能够保留在代码库中。此外,了解问题的实际情况会很酷。因为我读到的内容是某种编译器问题,但我没有设法找出不起作用的确切原因。

我想我应该添加一个我认为可能与该问题相关的警告。 (因为我不想将实际的项目结构和名称放在这里,所以我将在这里手动输入错误的缩写版本)

[警告]:分析器程序集../../X.dll引用编译器 版本 4.7.0.0 比当前运行的版本更新 4.4.0.0

c# .net azure-devops code-generation cicd
1个回答
0
投票

在等待回复的过程中,我自己尝试找出问题几个小时后,我实际上成功了。

我想我应该将答案发布在这里,以便其他遇到与我相同问题的人可以从中受益。

现在,最终我要弄清楚为什么引用了比 azure 使用的编译器版本更新的编译器版本。 --> 因此,如果您遇到同样的问题,请查找我在上面的问题中发布的警告,如果您看到该警告,那么这个解决方案适合您。

我发现我正在导入以下包:

<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" PrivateAssets="all" />

更改为

<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.0.0" PrivateAssets="all" />

一切顺利。

重要: 我没有在这里升级 azures 编译器版本,但如果您有权这样做,这也将是一个解决方案。

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