首页 新闻 会员 周边

使用 C# Source Generators 的项目升级到 .NET 7 遇到的问题

0
悬赏园豆:30 [已解决问题] 解决于 2023-06-09 12:55

之前在 .NET 6 中可以正常 build,升级到 .NET 7 后,在 build Cnblogs.YuanDun.Domain 项目时出现下面的 warning,这个 warning 会造成 Source Generators 没有生成所需的代码

CSC : warning CS8032: An instance of analyzer Cnblogs.YuanDun.SourceGenerators.PatternsGenerator cannot be created from C:\dev\cnblogs\YuanDun\src\Cnblogs.YuanDun.SourceGenerators\bin\Debug\net7.0\Cnblogs.YuanDun.SourceGenerators.dll : Could not load file or assembly 'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified..

Cnblogs.YuanDun.SourceGenerators.PatternsGenerator 项目中用到了 C# Source Generators,Cnblogs.YuanDun.Domain 项目引用了 Cnblogs.YuanDun.SourceGenerators.PatternsGenerator 项目

<ItemGroup>
  <ProjectReference Include="..\Cnblogs.YuanDun.SourceGenerators\Cnblogs.YuanDun.SourceGenerators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
</ItemGroup>
dudu的主页 dudu | 高人七级 | 园豆:31005
提问于:2023-06-09 08:32
< >
分享
最佳答案
0

通过微软官方文档 Get started with source generators 找到了原因:

The source generator project needs to target the netstandard2.0 TFM, otherwise it will not work.

将 TargetFramework 从 net7.0 改为 netstandard2.0 解决了。

dudu | 高人七级 |园豆:31005 | 2023-06-09 12:36
其他回答(1)
0

这个警告可能导致 Source Generators 无法生成所需的代码。根据警告信息,问题似乎与无法加载 System.Runtime 程序集有关。

  1. 首先,请确保您的 Cnblogs.YuanDun.SourceGenerators 项目已经升级到 .NET 7。您可以在项目文件(.csproj)中检查 <TargetFramework> 标签。它应该如下所示:
    <TargetFramework>net7.0</TargetFramework>
  2. 确保您的 Cnblogs.YuanDun.Domain 项目也已升级到 .NET 7,方法同上。
  3. 清理解决方案并重新构建。在 Visual Studio 中,您可以通过选择 "生成" 菜单中的 "清理解决方案" 和 "重新生成解决方案" 来完成此操作。如果您使用的是命令行,请执行以下命令:
    dotnet clean
    dotnet build
  4. 如果问题仍然存在,尝试在 Cnblogs.YuanDun.SourceGenerators 项目文件中添加对 System.Runtime 的显式引用。在项目文件(.csproj)中的 <ItemGroup> 标签内添加以下内容:
    <PackageReference Include="System.Runtime" Version="7.0.0" />
    然后再次清理并重新构建解决方案。
收获园豆:30
lanedm | 园豆:2378 (老鸟四级) | 2023-06-09 08:37

感谢 ChatGPT 的回答,1-3不能解决,问题仍然存在,尝试继续失败,根本没有 System.Runtime 7.0.0 这个 nuget 包

支持(0) 反对(0) dudu | 园豆:31005 (高人七级) | 2023-06-09 08:43

@dudu: 1. 首先,请确保您的 Visual Studio 或其他 IDE 已更新到支持 .NET 7 的最新版本。
2. 确保您的 global.json 文件(如果有)指向正确的 .NET SDK 版本。如果您没有 global.json 文件,可以考虑创建一个,以确保使用正确的 SDK 版本。在项目根目录下创建一个名为 global.json 的文件,并添加以下内容:
{
"sdk": {
"version": "7.0.100"
}
}
请根据您实际安装的 .NET 7 SDK 版本调整 "version" 字段的值。
3. 尝试删除 bin 和 obj 文件夹。这些文件夹位于每个项目的根目录下。删除这些文件夹后,重新构建解决方案。
4. 如果问题仍然存在,您可以尝试创建一个新的 .NET 7 项目,然后将您的源代码和项目引用逐个添加到新项目中。这有助于排除潜在的项目文件问题。

支持(0) 反对(0) lanedm | 园豆:2378 (老鸟四级) | 2023-06-09 08:45

@lanedm: ChatGPT 偷懒了,没有学习微软官方文档

支持(0) 反对(0) dudu | 园豆:31005 (高人七级) | 2023-06-09 12:37

@dudu: 它是对的和错的都学,可能有人提过错的这个解决方案,他就加进来了

支持(0) 反对(0) lanedm | 园豆:2378 (老鸟四级) | 2023-06-09 12:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册