.NET7源代码生成器在VS2022编译报错:无法找到System.Runtime 7.0.0.0
问题现象
在VS2022(版本17.7.4)中构建.NET7源代码生成器项目时,遇到以下错误:
System.Runtime, Version=7.0.0.0 - 系统找不到指定的文件。
CSC : 警告 CS8032:无法从E:\git\dotnetExamples\dn7-source-generators\generator\bin\Debug\net7.0\generator.dll创建分析器generator.RepoGenerator的实例:无法加载文件或程序集'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。
使用dotnet build命令可正常构建,但Visual Studio内构建必现该问题。已尝试更新SDK版本(当前为.NET 7.0.401)、匹配Microsoft.CodeAnalysis.CSharp版本(当前为4.7.0),均未解决。
生成器项目Generator.csproj原配置如下:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" /> </ItemGroup> </Project>
解决方案
1. 切换生成器项目为.NET Standard目标框架
源代码生成器本质是Roslyn分析器,推荐使用.NET Standard作为目标框架,以获得更好的兼容性,避免特定.NET版本的依赖问题:
修改Generator.csproj中的TargetFramework节点:
<TargetFramework>netstandard2.0</TargetFramework>
2. 调整Microsoft.CodeAnalysis.CSharp包引用的资产配置
为避免依赖项被错误传递,同时确保Visual Studio能正确加载分析器,修改包引用的资产设置:
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference>
3. 清理Visual Studio缓存
- 删除项目根目录下的
.vs隐藏文件夹 - 删除生成器项目和引用项目的
bin、obj目录 - 重启Visual Studio后重新构建
4. 验证VS组件完整性
打开Visual Studio安装器,检查.NET 7相关工作负载是否完整,必要时选择"修改"进行修复安装。
内容的提问来源于stack exchange,提问作者JasperDaDolphin

