C# dotnet build with source generators

Viewed 836

i have source generator in my .net5.0 project. In Visual Studio everything goes well but when i try to build app using dotnet cli source generator does not run:

error CS1061: 'CentralSystemResponseSender' does not contain a definition for 'SendResponseAsync' and no accessible extension method 'SendResponseAsync' accepting a first argument of type 'CentralSystemResponseSender' could be found (are you missing a using directive or an assembly reference?)

MSBuild version: Microsoft (R) Build Engine version 16.9.0+57a23d249 for .NET


Edit

msbuild -t:Rebuild in visual studio developer powershell build succeeded but i can`t use that in Gitlab CI/CD

Project structure:

-- Project.Api
     /-- SourceGenerator.A
  /-- Project.Domain
     /-- SourceGenerator.B

dotnet build "Project.Domain.csproj" success
dotnet build "Project.Api.csproj" throws error because SourceGenerator.B does not generate code.
Build whole solution also works but dotnet publish again throws error because SourceGenerator.B does not generate code.

Dockerfile:


FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY . .
RUN dotnet restore "generators/SourceGenerator.A/SourceGenerator.A.csproj"
RUN dotnet restore "generators/SourceGenerator.B/SourceGenerator.B.csproj"
RUN dotnet restore "src/Project.Domain/Anaconda.Domain.csproj"
RUN dotnet restore "src/Project.Api/Project.Api.csproj"
RUN dotnet build -c Release -o /app/build

FROM build AS publish
RUN dotnet publish -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Project.Api.dll"]

Project.Api.csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <DockerfileContext>..\..</DockerfileContext>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Net.Compilers.Toolset" Version="3.9.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\generators\Project.Generator.A\Project.Generator.A.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
    <ProjectReference Include="..\Project.Domain\Anaconda.Domain.csproj" />
  </ItemGroup>
</Project>

Project.Domain.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\generators\Project.Generator.B\Project.Generator.B.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
  </ItemGroup>
</Project>
0 Answers
Related