<Project>
  <!--
    Defaults inherited by every csproj. Individual projects may override.

    Deviation from the original v2 plan: TreatWarningsAsErrors is NOT set globally because the
    pre-v2 test projects (e.g. Admin.Tests) carry 240+ xUnit1051 analyzer warnings that would
    fail the build. New v2 projects (Commons, Cluster, ControlPlane, Runtime, OpcUaServer, AdminUI,
    Host, Security) MUST opt in to <TreatWarningsAsErrors>true</TreatWarningsAsErrors> in their
    own csproj. Once the legacy Admin/Server projects are deleted (Phase 10, Task 56), this can
    be promoted back to a global default.
  -->
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>

  <!--
    Wire the custom OTOPCUA0001 analyzer (UnwrappedCapabilityCallAnalyzer) into every project so
    the CapabilityInvoker-wrapping rule is enforced tree-wide, not just against the analyzer's own
    unit tests (arch-review 07/C-1 — the "built-but-never-wired" failure mode). Analyzer projects
    target netstandard2.0 and are loaded into the compiler host, so OutputItemType="Analyzer" +
    ReferenceOutputAssembly="false" is the correct incantation (the DLL is not linked). Excluded
    from the analyzer project itself (self-reference cycle) and its test project (which already
    references the analyzer directly). OTOPCUA0001 defaults to Warning; projects with genuine
    intentional unwrapped calls (unit tests exercising drivers at the wire level, the invoker's own
    internals) carry a scoped NoWarn / pragma — see the per-project suppressions.
  -->
  <ItemGroup Condition="'$(MSBuildProjectName)' != 'ZB.MOM.WW.OtOpcUa.Analyzers'
                        and '$(MSBuildProjectName)' != 'ZB.MOM.WW.OtOpcUa.Analyzers.Tests'">
    <ProjectReference Include="$(MSBuildThisFileDirectory)src/Tooling/ZB.MOM.WW.OtOpcUa.Analyzers/ZB.MOM.WW.OtOpcUa.Analyzers.csproj"
                      OutputItemType="Analyzer"
                      ReferenceOutputAssembly="false"
                      PrivateAssets="all" />
  </ItemGroup>
</Project>
