【问题标题】:How to run C# source generator in visual studio?如何在 Visual Studio 中运行 C# 源代码生成器?
【发布时间】:2021-05-16 03:37:43
【问题描述】:

最近我正在更新自己以学习这项新技术,但是即使我按照教程一步一步进行操作,我也无法运行源代码生成器。

我做了什么:

  1. 使用控制台应用程序创建一个解决方案,然后添加一个类库项目。这两个项目都是 .NET 5。

  2. 为这两个项目安装 NuGet 包 Microsoft.CodeAnalysis.CSharp.Workspaces。

  3. 在类库项目中,编写如下代码:

    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) {
            }
        }
    }
    
  4. 在控制台应用程序的Main方法中,编写如下代码:

                GeneratedNamespace.GeneratedClass.GeneratedMethod();
    
  5. 在控制台应用的.csproj中,添加如下代码:

      <ItemGroup>
        <ProjectReference Include="..\ClassLibrary_ExperimentalSourceGenerator\ClassLibrary_ExperimentalSourceGenerator.csproj"
                          OutputItemType="Analyzer"
                          ReferenceOutputAssembly="false" />
      </ItemGroup>
    
  6. 构建解决方案。

  7. 收到以下错误:

    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' 或其依赖项之一。系统找不到指定的文件。

【问题讨论】:

    标签: c# .net visual-studio


    【解决方案1】:

    我认为这里的问题是您的源代码生成器程序集以 .NET 5 为目标。

    源生成器必须以 netstandard2.0 为目标,才能在 Visual Studio 中正常工作。这是因为 VS 在内部运行 net48,所以它无法加载针对较新框架的代码。

    这里的提示是错误信息:

    无法加载文件或程序集“System.Runtime, Version=5.0.0.0...”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      相关资源
      最近更新 更多