Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

667
Vistas
Generador de código fuente de C#: advertencia CS8032: no se puede crear una instancia de analizador

Estoy tratando de construir un generador de fuentes. En este momento, solo el método estático más básico que devuelve "Hello World".

El proyecto del generador se compila, pero el código generado no está disponible, el depurador nunca se inicia y el resultado de la compilación muestra

CSC: advertencia CS8032: no se puede crear una instancia del analizador Generator.StaticPropertyEnum.helloWorld desde ...\bin\Debug\net5.0\Generator.StaticPropertyEnum.dll: no se pudo cargar el archivo o ensamblado 'System.Runtime, Version=5.0 .0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' o una de sus dependencias. El sistema no puede encontrar el archivo especificado..

Ejemplos a los que hago referencia

  • Proyecto de muestra del generador de equipo de Roslyn
  • Libro de cocina de Roslyn Team Generator
  • Proyecto Generator.Equals
  • Cómo depurar generadores de código fuente de C# 9

He intentado

  • cambiar TargetFramework y LanguageVersion tanto del generador como de los proyectos de prueba
  • haciendo referencia a muchas versiones de las bibliotecas de analizadores Microsoft.CodeAnalysis.CSharp y Microsoft.CodeAnalysis.Analyzers
  • haciendo referencia a una versión explícita de Microsoft.Net.Compilers.Toolset
  • Agregar una referencia explícita a la biblioteca NetStandard
  • comenzando desde cero con una plantilla de proyecto de analizador
  • buscando una plantilla de proyecto de generador (pero no encontré ninguna)

Versiones

Visual Studio: versión 16.8.3
SDK de .NET: 5.0.101

Código

Generador.csproj

 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.9.0-2.final" PrivateAssets="all" /> <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.0.0" PrivateAssets="all" /> </ItemGroup> </Project>

Probar csproj

 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <IsPackable>false</IsPackable> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" /> <PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="coverlet.collector" Version="1.3.0"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> </ItemGroup> <ItemGroup> <ProjectReference Include="..\Generator.StaticPropertyEnum\Generator.StaticPropertyEnum.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/> </ItemGroup> </Project>

Generador

 [Generator] public class helloWorld : ISourceGenerator { public void Execute(GeneratorExecutionContext context) { context.AddSource("HelloWorld-generated.cs", @" using System; namespace HelloWorld { public static class Hello { public static string SayHello() { return ""HelloWorld""; } } }"); } public void Initialize(GeneratorInitializationContext context) { #if DEBUG if(!Debugger.IsAttached) Debugger.Launch(); #endif } }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Los generadores de código fuente deben ser .NET Standard 2.0 para ejecutarse en Visual Studio 2019+ o .NET Standard 1.x para ejecutarse en Visual Studio 2017+.

over 4 years ago · Santiago Trujillo Denunciar

0

como @Yair-Halberstadt mencionó en una respuesta diferente, el error específico enumerado se debe al hecho de que actualmente los proyectos de generación de fuentes deben apuntar a netstandard2.0. Sin embargo, si obtiene el error CS8032 con un ensamblado diferente (por ejemplo Microsoft.CodeAnalysis, Version=3.0.x ... ), su problema probablemente se deba a una discrepancia en la versión del SDK. Por ejemplo, en mi computadora tengo SDK 5.0.302 que tiene la versión 3.10.0 de Microsoft.CodeAnalysis y Microsoft.CodeAnalysis.CSharp . Si bien el proyecto Generator usa nuget para obtener estos paquetes, la compilación del proyecto que hace referencia al generador resuelve estos archivos desde el SDK. Es por eso que volver a 3.8.0 ha funcionado para algunos comentaristas, la versión SDK que han instalado contiene 3.8.0 de estas referencias.

over 4 years ago · Santiago Trujillo Denunciar

0

Tengo un generador de fuentes que apunta a netstandard2.0 y net5.0 para soporte de nulabilidad.

 <TargetFrameworks>net5.0;netstandard2.0</TargetFrameworks> <Nullable>enable</Nullable>

y una biblioteca de muestra que apunta a los mismos marcos.

Se bloquea cuando el proyecto se está compilando en Visual Studio, pero se compila correctamente desde la terminal.

Para resolver esto, cambié el marco de destino al hacer referencia a él como un generador con SetTagetFramework y ahora se compila sin advertencias ni errores.

 <ItemGroup> <ProjectReference Include="..\MyGenerator\MyGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" SetTargetFramework="TargetFramework=netstandard2.0" /> </ItemGroup>
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda