Генератор исходного кода C#
пытаюсь расширить свой класс Vector2 с помощью генератора кода, сам генератор отображается в анализаторе но внутри пусто и мой файл не генерируется в чем может быть проблема? Настройки проекта генератора
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.0.1"/>
</ItemGroup>
</Project>
Настройки проекта в котором должен появиться сгенерированный класс
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="OpenTK" Version="4.7.1" />
</ItemGroup>
<ItemGroup>
<None Update="ShaderFragment\shader.frag">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="ShaderVertex\shader.vert">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\SwizzlingVectorGenerator\SwizzlingVectorGenerator\SwizzlingVectorGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup>
</Project>
Сам код генерации
using Microsoft.CodeAnalysis;
using System;
using System.Collections.Generic;
namespace SwizzlingVectorGenerator
{
[Generator]
public class VectorGenerator : ISourceGenerator
{
public void Execute(GeneratorExecutionContext context)
{
// Code generation goes here
var argsPoints = new List<char>()
{
'X','Y','Z','W'
};
string codeVector2Props = "";
for (int i = 0; i < argsPoints.Count; i++)
{
codeVector2Props += $@"public T {argsPoints[i]}
{{
set
{{
arg{i + 1} = value;
}}
get
{{
return arg{i + 1};
}}
}}";
for (int j = 0; j < argsPoints.Count; j++)
{
codeVector2Props += $@"public Vector2<T> {argsPoints[i]}{argsPoints[j]}
{{
set
{{
arg1 = value.{argsPoints[i]};
arg2= value.{argsPoints[j]};
}}
get
{{
return new Vector<T>({argsPoints[i]},{argsPoints[j]});
}}
}}";
}
codeVector2Props = $@"
namespace GameEngineProject.Swizzling
{{
public partial class Vector2<T> where T:new()
{{
{codeVector2Props}
}}
}}
";
context.AddSource($"Vector2.g.cs", codeVector2Props);
}
}
public void Initialize(GeneratorInitializationContext context)
{
// No initialization required for this one
}
}
}