Add Roslynator, SonarAnalyzer.CSharp, Meziantou.Analyzer, and AsyncFixer as central analyzer references (Directory.Build.targets, CPM-versioned, guarded on ManagePackageVersionsCentrally so the gitignored .mcp tool isn't affected). .editorconfig defaults dotnet_analyzer_diagnostic.severity to `suggestion` so the packs surface findings without failing the TreatWarningsAsErrors (TWAE) build; rules are promoted to warning/error incrementally (promotion = enforcement via the existing TWAE build, so no separate lint step is needed). StyleCop.Analyzers is intentionally excluded: its latest stable (1.1.118) crashes (AD0001) on C# records and overlaps the existing .editorconfig/Roslynator. Blazor .razor: editorconfig severity overrides don't reach analyzer diagnostics in Razor @code (source-generator limitation; dotnet format can't fix them either), so the currently-firing SonarAnalyzer rules are temporarily NoWarn-ed in ErsatzTV.csproj and burned down rule-by-rule in #25. The same rules run at suggestion on .cs. Formatting normalization (mixed UTF-8 BOM + whitespace) is deferred to its own PR. Full-solution Release build green (0 errors, 0 warnings). Refs #15 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
173 lines
9.8 KiB
XML
173 lines
9.8 KiB
XML
<Project Sdk="Microsoft.NET.Sdk.Web">
|
|
|
|
<PropertyGroup>
|
|
<TargetFramework>net10.0</TargetFramework>
|
|
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
|
|
<TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
|
|
<IsPackable>false</IsPackable>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<NoWarn>VSTHRD200,CA1873</NoWarn>
|
|
<!-- ersatztv#25: SonarAnalyzer findings in Blazor .razor @code can't be downgraded via
|
|
.editorconfig (Razor source-generator limitation), so under TreatWarningsAsErrors they
|
|
would break the build. Temporarily suppressed here; the #25 burn-down removes each ID
|
|
as its .razor findings are fixed. (These same rules run at `suggestion` on .cs via
|
|
.editorconfig — visible, non-blocking.) -->
|
|
<NoWarn>$(NoWarn);S6966;S3267;S2325;S3260;S2094;S3458;S3358;S6667;S125;S1135;S1751;S1125;S1066;S127;S927;S6610;S6580;S5693;S3440;S2933;S1871</NoWarn>
|
|
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
|
|
<Configurations>Debug;Release;Debug No Sync</Configurations>
|
|
<Platforms>AnyCPU</Platforms>
|
|
<UserSecretsId>bf31217d-f4ec-4520-8cc3-138059044ede</UserSecretsId>
|
|
<AnalysisLevel>latest-Recommended</AnalysisLevel>
|
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
|
<RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>
|
|
<NeutralLanguage>en-US</NeutralLanguage>
|
|
</PropertyGroup>
|
|
|
|
<PropertyGroup>
|
|
<OpenApiDocumentsDirectory>$(MSBuildProjectDirectory)\wwwroot\openapi</OpenApiDocumentsDirectory>
|
|
<OpenApiGenerateDocumentsOnBuild>false</OpenApiGenerateDocumentsOnBuild>
|
|
</PropertyGroup>
|
|
|
|
<Target Name="RenameOpenApiFiles" AfterTargets="GenerateOpenApiDocuments">
|
|
<Move SourceFiles="$(OpenApiDocumentsDirectory)\ErsatzTV.json" DestinationFiles="$(OpenApiDocumentsDirectory)\v1.json" />
|
|
<Move SourceFiles="$(OpenApiDocumentsDirectory)\ErsatzTV_scripted-schedule.json" DestinationFiles="$(OpenApiDocumentsDirectory)\scripted-schedule.json" />
|
|
<Move SourceFiles="$(OpenApiDocumentsDirectory)\ErsatzTV_scripted-schedule-tagged.json" DestinationFiles="$(OpenApiDocumentsDirectory)\scripted-schedule-tagged.json" />
|
|
</Target>
|
|
|
|
<ItemGroup>
|
|
<!-- <PackageReference Include="EntityFrameworkProfiler.Appender" /> -->
|
|
<PackageReference Include="Blazored.FluentValidation" />
|
|
<PackageReference Include="BlazorSortable" />
|
|
<PackageReference Include="Chronic.Core" />
|
|
<PackageReference Include="FluentValidation" />
|
|
<PackageReference Include="FluentValidation.AspNetCore" />
|
|
<PackageReference Include="Heron.MudCalendar" />
|
|
<PackageReference Include="HtmlSanitizer" />
|
|
<PackageReference Include="LanguageExt.Core" />
|
|
<PackageReference Include="Markdig" />
|
|
<PackageReference Include="MediatR.Courier.DependencyInjection" />
|
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
|
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" />
|
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" />
|
|
<PackageReference Include="Microsoft.AspNetCore.OpenApi" />
|
|
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" />
|
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design">
|
|
<PrivateAssets>all</PrivateAssets>
|
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
|
</PackageReference>
|
|
<PackageReference Include="Microsoft.Extensions.ApiDescription.Server">
|
|
<PrivateAssets>all</PrivateAssets>
|
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
|
</PackageReference>
|
|
<PackageReference Include="MudBlazor" />
|
|
<PackageReference Include="NaturalSort.Extension" />
|
|
<PackageReference Include="Refit.HttpClientFactory" />
|
|
<PackageReference Include="Scalar.AspNetCore" />
|
|
<PackageReference Include="Serilog" />
|
|
<PackageReference Include="Serilog.AspNetCore" />
|
|
<PackageReference Include="Serilog.Settings.Configuration" />
|
|
<PackageReference Include="VueCliMiddleware" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<ProjectReference Include="..\ErsatzTV.Application\ErsatzTV.Application.csproj" />
|
|
<ProjectReference Include="..\ErsatzTV.Core\ErsatzTV.Core.csproj" />
|
|
<ProjectReference Include="..\ErsatzTV.Infrastructure.MySql\ErsatzTV.Infrastructure.MySql.csproj" />
|
|
<ProjectReference Include="..\ErsatzTV.Infrastructure.Sqlite\ErsatzTV.Infrastructure.Sqlite.csproj" />
|
|
<ProjectReference Include="..\ErsatzTV.Infrastructure\ErsatzTV.Infrastructure.csproj" />
|
|
<ProjectReference Include="..\ErsatzTV.Core.Nullable\ErsatzTV.Core.Nullable.csproj" />
|
|
<ProjectReference Include="..\ErsatzTV.Scanner\ErsatzTV.Scanner.csproj" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<EmbeddedResource Include="Resources\Fonts\Sen.ttf" />
|
|
<EmbeddedResource Include="Resources\_background.png" />
|
|
<EmbeddedResource Include="Resources\Fonts\OPTIKabel-Heavy.otf" />
|
|
<EmbeddedResource Include="Resources\Fonts\Roboto-Regular.ttf" />
|
|
<EmbeddedResource Include="Resources\Scripts\_threePartEpisodes.js" />
|
|
<EmbeddedResource Include="Resources\Scripts\_episode.js" />
|
|
<EmbeddedResource Include="Resources\Scripts\_movie.js" />
|
|
<EmbeddedResource Include="Resources\Scripts\MpegTs\run.sh" />
|
|
<EmbeddedResource Include="Resources\Scripts\MpegTs\run.bat" />
|
|
<EmbeddedResource Include="Resources\Scripts\MpegTs\mpegts.yml" />
|
|
<EmbeddedResource Include="Resources\_song_album_cover_512.png" />
|
|
<EmbeddedResource Include="Resources\_song_background_1.png" />
|
|
<EmbeddedResource Include="Resources\_song_background_2.png" />
|
|
<EmbeddedResource Include="Resources\_song_background_3.png" />
|
|
<EmbeddedResource Include="Resources\song_progress_overlay.png" />
|
|
<EmbeddedResource Include="Resources\song_progress_overlay_43.png" />
|
|
<EmbeddedResource Include="Resources\ErsatzTV.png" />
|
|
<EmbeddedResource Include="Resources\ISO-639-2_utf-8.txt" />
|
|
<EmbeddedResource Include="Resources\Templates\_default.ass.sbntxt" />
|
|
<EmbeddedResource Include="Resources\Templates\_ArtistTitle_LeftMiddle.sbntxt" />
|
|
<EmbeddedResource Include="Resources\Templates\_ArtistTitleAlbum_CenterTop.sbntxt" />
|
|
<EmbeddedResource Include="Resources\Templates\_channel.sbntxt" />
|
|
<EmbeddedResource Include="Resources\Templates\_episode.sbntxt" />
|
|
<EmbeddedResource Include="Resources\Templates\_movie.sbntxt" />
|
|
<EmbeddedResource Include="Resources\Templates\_musicVideo.sbntxt" />
|
|
<EmbeddedResource Include="Resources\Templates\_otherVideo.sbntxt" />
|
|
<EmbeddedResource Include="Resources\Templates\_song.sbntxt" />
|
|
<EmbeddedResource Include="Resources\sequential-schedule-import.schema.json" />
|
|
<EmbeddedResource Include="Resources\sequential-schedule.schema.json" />
|
|
<EmbeddedResource Include="Resources\empty.sqlite3" />
|
|
<EmbeddedResource Include="Resources\test.avs" />
|
|
<EmbeddedResource Include="Resources\Templates\_remoteStream.sbntxt" />
|
|
<EmbeddedResource Update="Locals\Shared\MainLayout.resx">
|
|
<Generator>ResXFileCodeGenerator</Generator>
|
|
<LastGenOutput>MainLayout.Designer.cs</LastGenOutput>
|
|
</EmbeddedResource>
|
|
<EmbeddedResource Update="Locals\Pages\Channels.resx">
|
|
<Generator>ResXFileCodeGenerator</Generator>
|
|
<LastGenOutput>Channels.Designer.cs</LastGenOutput>
|
|
</EmbeddedResource>
|
|
<EmbeddedResource Update="Locals\Shared\Common.resx">
|
|
<Generator>ResXFileCodeGenerator</Generator>
|
|
<LastGenOutput>Common.Designer.cs</LastGenOutput>
|
|
</EmbeddedResource>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Content Include="..\artwork\Ersatztv.icns">
|
|
<Link>Ersatztv.icns</Link>
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</Content>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<_ContentIncludedByDefault Remove="wwwroot\css\open-iconic\FONT-LICENSE" />
|
|
<_ContentIncludedByDefault Remove="wwwroot\css\open-iconic\font\css\open-iconic-bootstrap.min.css" />
|
|
<_ContentIncludedByDefault Remove="wwwroot\css\open-iconic\font\fonts\open-iconic.eot" />
|
|
<_ContentIncludedByDefault Remove="wwwroot\css\open-iconic\font\fonts\open-iconic.otf" />
|
|
<_ContentIncludedByDefault Remove="wwwroot\css\open-iconic\font\fonts\open-iconic.svg" />
|
|
<_ContentIncludedByDefault Remove="wwwroot\css\open-iconic\font\fonts\open-iconic.ttf" />
|
|
<_ContentIncludedByDefault Remove="wwwroot\css\open-iconic\font\fonts\open-iconic.woff" />
|
|
<_ContentIncludedByDefault Remove="wwwroot\css\open-iconic\ICON-LICENSE" />
|
|
<_ContentIncludedByDefault Remove="wwwroot\css\open-iconic\README.md" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Compile Update="Locals\Shared\MainLayout.Designer.cs">
|
|
<DesignTime>True</DesignTime>
|
|
<AutoGen>True</AutoGen>
|
|
<DependentUpon>MainLayout.resx</DependentUpon>
|
|
</Compile>
|
|
<Compile Update="Locals\Pages\Channels.Designer.cs">
|
|
<DesignTime>True</DesignTime>
|
|
<AutoGen>True</AutoGen>
|
|
<DependentUpon>Channels.resx</DependentUpon>
|
|
</Compile>
|
|
<Compile Update="Locals\Shared\Common.Designer.cs">
|
|
<DesignTime>True</DesignTime>
|
|
<AutoGen>True</AutoGen>
|
|
<DependentUpon>Common.resx</DependentUpon>
|
|
</Compile>
|
|
</ItemGroup>
|
|
|
|
<ProjectExtensions>
|
|
<VisualStudio>
|
|
<UserProperties client-app_4package_1json__JsonSchema="https://json.schemastore.org/phraseapp.json" />
|
|
</VisualStudio>
|
|
</ProjectExtensions>
|
|
|
|
</Project>
|