Development
Local environment for building and packing the abstractions package.
Prerequisites
- .NET SDK 10.0.x - the project targets
net10.0(<TargetFramework>net10.0</TargetFramework>in the csproj). - The project uses a
Microsoft.AspNetCore.Appframework reference, so the ASP.NET Core shared framework must be available (it ships with the .NET SDK).
Project layout
src/
├── Directory.Build.props # reads <version> from application.properties
└── Schuly.Plugin.Abstractions/
├── ISchulyPlugin.cs # + PluginServiceContext record
├── IPluginBackgroundTask.cs
├── IPluginEventHandler.cs
├── IPluginUserContext.cs
├── IPluginLogin.cs # + PluginLoginResult record
├── NUGET_README.md # packed as the NuGet README
├── Schuly.Plugin.Abstractions.csproj
└── libs/ # shipped backend DLLs
├── Schuly.Domain.dll
└── Schuly.Infrastructure.dllThe csproj references libs/Schuly.Domain.dll and libs/Schuly.Infrastructure.dll (synced from SchulyBackend) so the project compiles against them, and packs them under lib/net10.0/ so plugins get typed DB access. The transitive deps those DLLs need (Microsoft.EntityFrameworkCore, Npgsql.EntityFrameworkCore.PostgreSQL) are declared as PackageReferences in the csproj.
Build
dotnet build src/Schuly.Plugin.Abstractions/Schuly.Plugin.Abstractions.csprojThere is no test project in this repo; the contract is verified by downstream consumers (SchulyBackend and the plugins).
Pack dry-run (local)
To produce the .nupkg locally without publishing:
dotnet pack Schuly.Plugin.Abstractions.csproj --configuration Release -o ./out(From the repo root, point at the full path src/Schuly.Plugin.Abstractions/Schuly.Plugin.Abstractions.csproj - that's exactly what the publish workflow runs.)
You do not pass -p:Version=. The version comes from application.properties (<version>…</version>), which src/Directory.Build.props reads at project-load time via a regex and assigns to $(Version). Directory.Build.props also pins the assembly version to MAJOR.MINOR.0.0 so any MAJOR.MINOR.x plugin binds to a single stable assembly version, while FileVersion / InformationalVersion keep the full version for diagnostics.
See publishing for how packing fits into the release flow.
