【问题标题】:C# Source Generator cannot be created无法创建 C# 源代码生成器
【发布时间】:2021-09-17 05:37:45
【问题描述】:

我自己和我的同事都在过去几周的某个时候开始看到这个问题:

构建失败

CSC:警告 CS8032:无法从 /Users/work/dev/git/reporting-model/src/My.Company.Generators/bin/Debug/netstandard2.1/My 创建分析器 My.Company.Generators.ReportingV2Generator 的实例.Company.Generators.dll:无法加载文件或程序集“Microsoft.CodeAnalysis,版本=3.10.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”。系统找不到指定的文件。[/Users/work/dev/git/reporting-model/src/My.Team.Models.ReportingV2/My.Team.Models.ReportingV2.csproj]

/Users/work/dev/git/reporting-model/src/My.Company.Api/SmokeTests/Tests/ContentAskExpertSmokeTest.cs(7,20):错误 CS0234:类型或命名空间名称“模型”不存在于命名空间“My.Team”(您是否缺少程序集引用?) [/Users/work/dev/git/reporting-model/src/My.Company.Api/My.Company.Api.csproj]
... 更多上述“类型或命名空间”错误
...

这在 macOS 和 Windows 上都会发生。它可以在 Linux 上运行(无论是在个人机器上还是在 mcr.microsoft.com/dotnet/sdk:5.0 内部。

从字面上看,源生成器代码/csproj 没有任何变化,它是在大约两周前自发开始的。我也可以在两个月前的提交中重现此内容,所以看起来包中的某些内容可能在外部发生了变化?

【问题讨论】:

  • "无法加载文件或程序集'Microsoft.CodeAnalysis'...系统找不到指定的文件。"
  • 是的,但它就在那里,100%。就像我说的,我检查了两个月前的旧提交,并且出现了同样的问题。
  • dotnet restore 也可以,我可以看到这种依赖关系
  • 是否已将缓存的代码分析 NuGet 包更新为不同的版本?
  • 似乎不太可能,因为它发生在 5 台不同的机器(mac 和 windows)上,但从不在 linux 上,而且它们都来自同一个 jfrog 工件

标签: c# sourcegenerators csharp-source-generator


【解决方案1】:

我直接去微软找到了解决方案。

失败案例的错误是生成器依赖于Microsoft.CodeAnalysis.dll 3.10版本,而3.10仅在5.0.300中提供。看来您的成功案例使用的是 SDK 5.0.300,但失败案例使用的是 5.0.204。

您有两种选择来解决此问题:

如果您没有使用 3.10 中引入的任何源生成器功能,您可以将 Microsoft.CodeAnalysis nuget 包目标降低到 3.9 确保所有构建都使用至少 5.0.300 版本的 SDK

https://github.com/dotnet/roslyn/issues/54710

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2013-06-24
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多