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

  <!-- nucleic-brokerd (docs/WINDOWS_PORT.md §2.3, §3.3): the C# child process of
       nucleic-hostd that owns every Microsoft.WSL.Containers (wslc) call, exposed to Swift
       as NDJSON JSON-RPC 2.0 over stdio.

       The wslc WinRT surface is isolated behind IWslc, and the REAL facade is compiled only
       when -p:UseWslc=true (a Windows machine with the preview NuGet reachable): the API is
       public preview with breaking changes expected, and the M1 spike validates it. Every
       other build — Linux CI, the fake-backed unit tests — compiles the portable core plus
       an "unavailable" facade, so broker logic and RPC surface are testable everywhere. -->
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <AssemblyName>nucleic-brokerd</AssemblyName>
    <RootNamespace>NucleicBroker</RootNamespace>
  </PropertyGroup>

  <PropertyGroup Condition="'$(UseWslc)' == 'true'">
    <!-- 26100, NOT the 19041 the package's lib folder advertises. Those disagree, and the
         binary wins: `lib/net8.0-windows10.0.19041.0/wslcsdkcs.dll` is itself compiled against
         Microsoft.Windows.SDK.NET 10.0.26100.79, so a 19041 targeting pack cannot load it —
         `error CS1705: ... uses 'Microsoft.Windows.SDK.NET, Version=10.0.26100.79' which has a
         higher version than referenced assembly ... 10.0.19041.38`. Matching the folder name
         looks right and does not build. -->
    <TargetFramework>net9.0-windows10.0.26100.0</TargetFramework>
    <!-- The TFM alone selects a targeting pack by MAJOR revision only, and the .NET 9 SDK's
         default for 26100 is 10.0.26100.38 — still below the .79 wslcsdkcs was built against,
         so CS1705 survives the TFM bump. This pins the projection itself. .80 rather than the
         .79 the error names because .79 was never published to nuget.org; the constraint is a
         floor, so the next one up satisfies it. Raise it, never lower it, if a package bump
         moves the floor again. -->
    <WindowsSdkPackageVersion>10.0.26100.80</WindowsSdkPackageVersion>
    <DefineConstants>$(DefineConstants);USE_WSLC</DefineConstants>
  </PropertyGroup>

  <ItemGroup Condition="'$(UseWslc)' != 'true'">
    <Compile Remove="Wslc/**/*.cs" />
  </ItemGroup>

  <ItemGroup Condition="'$(UseWslc)' == 'true'">
    <!-- Version-pinned (docs/WINDOWS_PORT.md §15): bump deliberately per release, never
         float — the API is preview and breaking changes must be absorbed behind IWslc.
         2.9.3 is the ONLY version on nuget.org and it tracks WSL's own version scheme, not
         a `0.1.0-preview.N` one; the invented pin this replaced could never have restored. -->
    <PackageReference Include="Microsoft.WSL.Containers" Version="[2.9.3]" />
  </ItemGroup>

</Project>
