如何解决如何在 Visual Studio 中运行 C# 源代码生成器?
最近我正在更新我的自我以学习这项新技术,但是即使我按照教程一步一步来,我也无法运行源代码生成器。
我做了什么:
-
为两个项目安装 NuGet 包
Microsoft.CodeAnalysis.CSharp.Workspaces
。 -
在类库项目中,编写如下代码:
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Text; using System.Text; namespace ClassLibrary { [Generator] public class MySourceGenerator : ISourceGenerator { public void Execute(GeneratorExecutionContext context) { context.AddSource("myGeneratedFile.cs",SourceText.From(@" namespace Generatednamespace { public class GeneratedClass { public static void GeneratedMethod() { // generated code } } }",Encoding.UTF8)); } public void Initialize(GeneratorInitializationContext context) { } } }
-
Generatednamespace.GeneratedClass.GeneratedMethod();
-
<ItemGroup> <ProjectReference Include="..\ClassLibrary_ExperimentalSourceGenerator\ClassLibrary_ExperimentalSourceGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" /> </ItemGroup>
-
构建解决方案。
-
收到以下错误:
CS0103
当前上下文中不存在名称“Generatednamespace” ConsoleApp1 D:\OneDrive\VS Solutions\ConsoleApp1\Program.cs以及以下警告:
CS8032
无法从 D:\OneDrive\VS Solutions\ClassLibrary_ExperimentalSourceGenerator\bin\Debug\net5.0\ClassLibrary_ExperimentalSourceGenerator.dll 创建分析器 ClassLibrary.MySourceGenerator 的实例:无法加载文件或程序集“System.Runtime,Version=5.0.0.0, Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。系统找不到指定的文件。
解决方法
我认为这里的问题在于您的源代码生成器程序集针对 .NET 5。
源代码生成器必须以 netstandard2.0
为目标,才能在 Visual Studio 中正常工作。这是因为 VS 在内部运行 net48
,因此它无法加载针对较新框架的代码。
这里的提示是错误信息:
无法加载文件或程序集“System.Runtime,Version=5.0.0.0...”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。