msbuild icon indicating copy to clipboard operation
msbuild copied to clipboard

BuildCheck: Warn when reading Configuration early

Open Youssef1313 opened this issue 1 month ago • 6 comments

Summary

Reading Configuration early can be problematic, and can introduce behavior differences between building single project vs building whole solution.

Building a whole solution will set Configuration as a global property, making it available anytime in evaluation (e.g, in Directory.Build.props). But building a single project without explicitly specifying configuration will only have the value available a little bit later and won't be available in Directory.Build.props.

Logic that will try to change output path based on Configuration in Directory.Build.props will suffer from behavior differences between building single project vs building whole solution, which is very bad.

Youssef1313 avatar Nov 19 '25 22:11 Youssef1313

FYI @rainersigwald.

Closely related to https://github.com/modelcontextprotocol/csharp-sdk/pull/990

Youssef1313 avatar Nov 19 '25 22:11 Youssef1313

We already have a buildcheck for properties that are used before they are initialized - would it have caught this? You can run the build with /check to see.

baronfel avatar Nov 19 '25 22:11 baronfel

Interesting. Running dotnet build /check on https://github.com/modelcontextprotocol/csharp-sdk/tree/bf3dd5e6bc38ce267e373e53e4a4e654b119e2a9:

C:\Users\ygerges\Desktop\csharp-sdk [main ↑10]> dotnet build /check
Restore complete (8.1s)
  ModelContextProtocol.TestSseServer net9.0 succeeded with 1 warning(s) (0.1s)
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.TestSseServer\ModelContextProtocol.TestSseServer.csproj (5,5) used before it was initialized.
  ModelContextProtocol.TestOAuthServer net10.0 succeeded (21.5s) → artifacts\bin\ModelContextProtocol.TestOAuthServer\Debug\net10.0\ModelContextProtocol.TestOAuthServer.dll
  ModelContextProtocol.TestOAuthServer net9.0 succeeded (20.5s) → artifacts\bin\ModelContextProtocol.TestOAuthServer\Debug\net9.0\ModelContextProtocol.TestOAuthServer.dll
  ModelContextProtocol.Core netstandard2.0 succeeded with 2 warning(s) (29.5s) → artifacts\bin\ModelContextProtocol.Core\Debug\netstandard2.0\ModelContextProtocol.Core.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj (4,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\NuGet.Build.Tasks.Pack.targets(33,5): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'Description' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj (8,5) used before it was initialized.
  ModelContextProtocol.Core net10.0 succeeded with 1 warning(s) (33.8s) → artifacts\bin\ModelContextProtocol.Core\Debug\net10.0\ModelContextProtocol.Core.dll
    C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj(36,14): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at  used before it was initialized.
  ModelContextProtocol.TestOAuthServer net8.0 succeeded (8.5s) → artifacts\bin\ModelContextProtocol.TestOAuthServer\Debug\net8.0\ModelContextProtocol.TestOAuthServer.dll
  ModelContextProtocol.Core net9.0 succeeded with 1 warning(s) (33.2s) → artifacts\bin\ModelContextProtocol.Core\Debug\net9.0\ModelContextProtocol.Core.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(36,24): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsAotCompatible' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj (14,5) used before it was initialized.
  ModelContextProtocol.Core net8.0 succeeded with 3 warning(s) (33.5s) → artifacts\bin\ModelContextProtocol.Core\Debug\net8.0\ModelContextProtocol.Core.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj (4,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\NuGet.Build.Tasks.Pack.targets(33,5): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'Description' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj (8,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(134,33): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsAotCompatible' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj (14,5) used before it was initialized.
  ModelContextProtocol net8.0 succeeded with 3 warning(s) (6.3s) → artifacts\bin\ModelContextProtocol\Debug\net8.0\ModelContextProtocol.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol\ModelContextProtocol.csproj (4,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\NuGet.Build.Tasks.Pack.targets(33,5): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'Description' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol\ModelContextProtocol.csproj (8,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(134,33): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsAotCompatible' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol\ModelContextProtocol.csproj (13,5) used before it was initialized.
  ModelContextProtocol.TestServer net10.0 succeeded (8.3s) → artifacts\bin\ModelContextProtocol.TestServer\Debug\net10.0\TestServer.dll
  ModelContextProtocol net10.0 succeeded with 1 warning(s) (5.0s) → artifacts\bin\ModelContextProtocol\Debug\net10.0\ModelContextProtocol.dll
    C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol\ModelContextProtocol.csproj(12,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at  used before it was initialized.
  ModelContextProtocol netstandard2.0 succeeded (2.8s) → artifacts\bin\ModelContextProtocol\Debug\netstandard2.0\ModelContextProtocol.dll
  ModelContextProtocol.TestServer net8.0 succeeded (9.7s) → artifacts\bin\ModelContextProtocol.TestServer\Debug\net8.0\TestServer.dll
  ModelContextProtocol.TestServer net472 win-x86 succeeded (9.6s) → artifacts\bin\ModelContextProtocol.TestServer\Debug\net472\TestServer.exe
  QuickstartClient net8.0 succeeded with 1 warning(s) (13.9s) → artifacts\bin\QuickstartClient\Debug\net8.0\QuickstartClient.dll
    C:\Users\ygerges\Desktop\csharp-sdk\Directory.Build.props(40,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\QuickstartClient\QuickstartClient.csproj (5,9) used before it was initialized.
  ChatWithTools net8.0 succeeded with 1 warning(s) (14.3s) → artifacts\bin\ChatWithTools\Debug\net8.0\ChatWithTools.dll
    C:\Users\ygerges\Desktop\csharp-sdk\Directory.Build.props(40,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\ChatWithTools\ChatWithTools.csproj (5,5) used before it was initialized.
  LoggingClient net9.0 succeeded with 1 warning(s) (10.3s) → artifacts\bin\LoggingClient\Debug\net9.0\LoggingClient.dll
    C:\Users\ygerges\Desktop\csharp-sdk\Directory.Build.props(40,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\docs\concepts\logging\samples\client\LoggingClient.csproj (5,5) used before it was initialized.
  ElicitationClient net9.0 succeeded with 1 warning(s) (10.0s) → artifacts\bin\ElicitationClient\Debug\net9.0\ElicitationClient.dll
    C:\Users\ygerges\Desktop\csharp-sdk\Directory.Build.props(40,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\docs\concepts\elicitation\samples\client\ElicitationClient.csproj (5,5) used before it was initialized.
  ProgressClient net9.0 succeeded with 1 warning(s) (10.3s) → artifacts\bin\ProgressClient\Debug\net9.0\ProgressClient.dll
    C:\Users\ygerges\Desktop\csharp-sdk\Directory.Build.props(40,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\docs\concepts\progress\samples\client\ProgressClient.csproj (5,5) used before it was initialized.
  ModelContextProtocol net9.0 succeeded with 3 warning(s) (9.9s) → artifacts\bin\ModelContextProtocol\Debug\net9.0\ModelContextProtocol.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol\ModelContextProtocol.csproj (4,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\NuGet.Build.Tasks.Pack.targets(33,5): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'Description' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol\ModelContextProtocol.csproj (8,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(134,33): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsAotCompatible' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol\ModelContextProtocol.csproj (13,5) used before it was initialized.
  ProtectedMcpClient net9.0 succeeded with 1 warning(s) (10.4s) → artifacts\bin\ProtectedMcpClient\Debug\net9.0\ProtectedMcpClient.dll
    C:\Users\ygerges\Desktop\csharp-sdk\Directory.Build.props(40,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\ProtectedMcpClient\ProtectedMcpClient.csproj (5,5) used before it was initialized.
  TestServerWithHosting net10.0 succeeded with 1 warning(s) (11.6s) → artifacts\bin\TestServerWithHosting\Debug\net10.0\TestServerWithHosting.dll
    C:\Users\ygerges\Desktop\csharp-sdk\samples\TestServerWithHosting\TestServerWithHosting.csproj(8,17): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at  used before it was initialized.
  QuickstartWeatherServer net8.0 succeeded with 1 warning(s) (11.8s) → artifacts\bin\QuickstartWeatherServer\Debug\net8.0\QuickstartWeatherServer.dll
    C:\Users\ygerges\Desktop\csharp-sdk\Directory.Build.props(40,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\QuickstartWeatherServer\QuickstartWeatherServer.csproj (5,9) used before it was initialized.
  TestServerWithHosting net8.0 succeeded with 1 warning(s) (12.2s) → artifacts\bin\TestServerWithHosting\Debug\net8.0\TestServerWithHosting.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\TestServerWithHosting\TestServerWithHosting.csproj (5,5) used before it was initialized.
  ModelContextProtocol.AspNetCore net8.0 succeeded with 3 warning(s) (14.6s) → artifacts\bin\ModelContextProtocol.AspNetCore\Debug\net8.0\ModelContextProtocol.AspNetCore.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.AspNetCore\ModelContextProtocol.AspNetCore.csproj (4,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\NuGet.Build.Tasks.Pack.targets(33,5): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'Description' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.AspNetCore\ModelContextProtocol.AspNetCore.csproj (10,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(134,33): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsAotCompatible' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.AspNetCore\ModelContextProtocol.AspNetCore.csproj (12,5) used before it was initialized.
  InMemoryTransport net8.0 succeeded with 1 warning(s) (14.9s) → artifacts\bin\InMemoryTransport\Debug\net8.0\InMemoryTransport.dll
    C:\Users\ygerges\Desktop\csharp-sdk\Directory.Build.props(40,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\InMemoryTransport\InMemoryTransport.csproj (5,5) used before it was initialized.
  ModelContextProtocol.AspNetCore net10.0 succeeded (14.6s) → artifacts\bin\ModelContextProtocol.AspNetCore\Debug\net10.0\ModelContextProtocol.AspNetCore.dll
  TestServerWithHosting net472 win-x86 succeeded with 1 warning(s) (9.7s) → artifacts\bin\TestServerWithHosting\Debug\net472\TestServerWithHosting.exe
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\TestServerWithHosting\TestServerWithHosting.csproj (5,5) used before it was initialized.
  ModelContextProtocol.TestServer net9.0 succeeded (6.1s) → artifacts\bin\ModelContextProtocol.TestServer\Debug\net9.0\TestServer.dll
  ModelContextProtocol.TestServer succeeded with 1 warning(s) (0.0s)
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.TestServer\ModelContextProtocol.TestServer.csproj (5,5) used before it was initialized.
  ModelContextProtocol.AspNetCore net9.0 succeeded with 3 warning(s) (8.8s) → artifacts\bin\ModelContextProtocol.AspNetCore\Debug\net9.0\ModelContextProtocol.AspNetCore.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.AspNetCore\ModelContextProtocol.AspNetCore.csproj (4,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\NuGet.Build.Tasks.Pack.targets(33,5): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'Description' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.AspNetCore\ModelContextProtocol.AspNetCore.csproj (10,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(134,33): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsAotCompatible' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.AspNetCore\ModelContextProtocol.AspNetCore.csproj (12,5) used before it was initialized.
  TestServerWithHosting net9.0 succeeded with 2 warning(s) (8.1s) → artifacts\bin\TestServerWithHosting\Debug\net9.0\TestServerWithHosting.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\TestServerWithHosting\TestServerWithHosting.csproj (5,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(132,33): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'PublishAot' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\TestServerWithHosting\TestServerWithHosting.csproj (8,5) used before it was initialized.
  ModelContextProtocol.TestSseServer net10.0 succeeded (10.4s) → artifacts\bin\ModelContextProtocol.TestSseServer\Debug\net10.0\TestSseServer.dll
  Logging net9.0 succeeded with 1 warning(s) (12.7s) → artifacts\bin\Logging\Debug\net9.0\Logging.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk.Web\Sdk\Sdk.props(18,50): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\docs\concepts\logging\samples\server\Logging.csproj (4,5) used before it was initialized.
  EverythingServer net9.0 succeeded with 1 warning(s) (12.2s) → artifacts\bin\EverythingServer\Debug\net9.0\EverythingServer.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk.Web\Sdk\Sdk.props(18,50): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\EverythingServer\EverythingServer.csproj (4,5) used before it was initialized.
  AspNetCoreMcpServer net9.0 succeeded with 1 warning(s) (11.0s) → artifacts\bin\AspNetCoreMcpServer\Debug\net9.0\AspNetCoreMcpServer.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk.Web\Sdk\Sdk.props(18,50): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\AspNetCoreMcpServer\AspNetCoreMcpServer.csproj (4,5) used before it was initialized.
  Elicitation net9.0 succeeded with 1 warning(s) (14.8s) → artifacts\bin\Elicitation\Debug\net9.0\Elicitation.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk.Web\Sdk\Sdk.props(18,50): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\docs\concepts\elicitation\samples\server\Elicitation.csproj (4,5) used before it was initialized.
  ModelContextProtocol.Tests net10.0 succeeded with 2 warning(s) (38.2s) → artifacts\bin\ModelContextProtocol.Tests\Debug\net10.0\ModelContextProtocol.Tests.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.Tests\ModelContextProtocol.Tests.csproj (5,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(121,20): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsTestProject' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.Tests\ModelContextProtocol.Tests.csproj (10,5) used before it was initialized.
  ModelContextProtocol.AspNetCore.Tests net10.0 succeeded with 1 warning(s) (18.0s) → artifacts\bin\ModelContextProtocol.AspNetCore.Tests\Debug\net10.0\ModelContextProtocol.AspNetCore.Tests.dll
    C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.AspNetCore.Tests\ModelContextProtocol.AspNetCore.Tests.csproj(54,14): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at  used before it was initialized.
  ModelContextProtocol.Tests net8.0 succeeded with 1 warning(s) (36.1s) → artifacts\bin\ModelContextProtocol.Tests\Debug\net8.0\ModelContextProtocol.Tests.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(1313,29): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsTestProject' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.Tests\ModelContextProtocol.Tests.csproj (10,5) used before it was initialized.
  ModelContextProtocol.Tests net9.0 succeeded with 1 warning(s) (26.0s) → artifacts\bin\ModelContextProtocol.Tests\Debug\net9.0\ModelContextProtocol.Tests.dll
    C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.Tests\ModelContextProtocol.Tests.csproj(77,14): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at  used before it was initialized.
  ModelContextProtocol.Tests net472 win-x86 succeeded with 1 warning(s) (26.4s) → artifacts\bin\ModelContextProtocol.Tests\Debug\net472\ModelContextProtocol.Tests.exe
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(121,20): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsTestProject' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.Tests\ModelContextProtocol.Tests.csproj (10,5) used before it was initialized.
  ModelContextProtocol.Tests succeeded with 2 warning(s) (0.0s)
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.Tests\ModelContextProtocol.Tests.csproj (5,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(121,20): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsTestProject' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.Tests\ModelContextProtocol.Tests.csproj (10,5) used before it was initialized.
  ModelContextProtocol.TestSseServer net8.0 succeeded (6.6s) → artifacts\bin\ModelContextProtocol.TestSseServer\Debug\net8.0\TestSseServer.dll
  ModelContextProtocol.TestSseServer net9.0 succeeded (8.1s) → artifacts\bin\ModelContextProtocol.TestSseServer\Debug\net9.0\TestSseServer.dll
  ProtectedMcpServer net9.0 succeeded with 1 warning(s) (7.8s) → artifacts\bin\ProtectedMcpServer\Debug\net9.0\ProtectedMcpServer.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk.Web\Sdk\Sdk.props(18,50): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\ProtectedMcpServer\ProtectedMcpServer.csproj (4,5) used before it was initialized.
  ModelContextProtocol.TestSseServer succeeded with 1 warning(s) (0.4s)
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.TestSseServer\ModelContextProtocol.TestSseServer.csproj (5,5) used before it was initialized.
  HttpContext net9.0 succeeded with 1 warning(s) (9.8s) → artifacts\bin\HttpContext\Debug\net9.0\HttpContext.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk.Web\Sdk\Sdk.props(18,50): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\docs\concepts\httpcontext\samples\HttpContext.csproj (4,5) used before it was initialized.
  AspNetCoreMcpPerSessionTools net9.0 succeeded with 1 warning(s) (7.2s) → artifacts\bin\AspNetCoreMcpPerSessionTools\Debug\net9.0\AspNetCoreMcpPerSessionTools.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk.Web\Sdk\Sdk.props(18,50): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\samples\AspNetCoreMcpPerSessionTools\AspNetCoreMcpPerSessionTools.csproj (4,5) used before it was initialized.
  Progress net9.0 succeeded with 1 warning(s) (8.0s) → artifacts\bin\Progress\Debug\net9.0\Progress.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk.Web\Sdk\Sdk.props(18,50): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\docs\concepts\progress\samples\server\Progress.csproj (4,5) used before it was initialized.
  ModelContextProtocol.AspNetCore.Tests net8.0 succeeded with 1 warning(s) (4.4s) → artifacts\bin\ModelContextProtocol.AspNetCore.Tests\Debug\net8.0\ModelContextProtocol.AspNetCore.Tests.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(121,20): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsTestProject' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.AspNetCore.Tests\ModelContextProtocol.AspNetCore.Tests.csproj (8,5) used before it was initialized.
  ModelContextProtocol.AspNetCore.Tests net9.0 succeeded with 2 warning(s) (3.8s) → artifacts\bin\ModelContextProtocol.AspNetCore.Tests\Debug\net9.0\ModelContextProtocol.AspNetCore.Tests.dll
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.AspNetCore.Tests\ModelContextProtocol.AspNetCore.Tests.csproj (4,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(121,20): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsTestProject' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.AspNetCore.Tests\ModelContextProtocol.AspNetCore.Tests.csproj (8,5) used before it was initialized.
  ModelContextProtocol.AspNetCore.Tests succeeded with 2 warning(s) (0.0s)
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(88,25): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFrameworks' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.AspNetCore.Tests\ModelContextProtocol.AspNetCore.Tests.csproj (4,5) used before it was initialized.
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(121,20): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsTestProject' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\tests\ModelContextProtocol.AspNetCore.Tests\ModelContextProtocol.AspNetCore.Tests.csproj (8,5) used before it was initialized.

Build succeeded with 57 warning(s) in 112.3s

Few warnings, but none is about "Configuration".

Even if I run on a single project with dotnet build /check .\src\ModelContextProtocol\ModelContextProtocol.csproj, I see nothing about Configuration:

C:\Users\ygerges\Desktop\csharp-sdk [main ↑10]> dotnet build /check .\src\ModelContextProtocol\ModelContextProtocol.csproj
Restore complete (0.9s)
  ModelContextProtocol.Core net8.0 succeeded with 1 warning(s) (0.0s)
    C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj(36,14): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at  used before it was initialized.
  ModelContextProtocol.Core net9.0 succeeded with 1 warning(s) (0.0s)
    C:\Program Files\dotnet\sdk\10.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(36,24): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'IsAotCompatible' first declared/initialized at C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj (14,5) used before it was initialized.
  ModelContextProtocol.Core netstandard2.0 succeeded (4.0s) → artifacts\bin\ModelContextProtocol.Core\netstandard2.0\ModelContextProtocol.Core.dll
  ModelContextProtocol.Core net8.0 succeeded (4.5s) → artifacts\bin\ModelContextProtocol.Core\net8.0\ModelContextProtocol.Core.dll
  ModelContextProtocol.Core net10.0 succeeded (4.6s) → artifacts\bin\ModelContextProtocol.Core\net10.0\ModelContextProtocol.Core.dll
  ModelContextProtocol.Core net9.0 succeeded (4.7s) → artifacts\bin\ModelContextProtocol.Core\net9.0\ModelContextProtocol.Core.dll
  ModelContextProtocol net8.0 succeeded (0.7s) → artifacts\bin\ModelContextProtocol\net8.0\ModelContextProtocol.dll
  ModelContextProtocol net10.0 succeeded with 1 warning(s) (1.0s) → artifacts\bin\ModelContextProtocol\net10.0\ModelContextProtocol.dll
    C:\Users\ygerges\Desktop\csharp-sdk\src\ModelContextProtocol\ModelContextProtocol.csproj(12,18): warning BC0202: https://aka.ms/buildcheck/codes#BC0202 - Property: 'TargetFramework' first declared/initialized at  used before it was initialized.
  ModelContextProtocol net9.0 succeeded (0.8s) → artifacts\bin\ModelContextProtocol\net9.0\ModelContextProtocol.dll
  ModelContextProtocol netstandard2.0 succeeded (2.2s) → artifacts\bin\ModelContextProtocol\netstandard2.0\ModelContextProtocol.dll

Build succeeded with 3 warning(s) in 8.6s

Youssef1313 avatar Nov 19 '25 22:11 Youssef1313

@Youssef1313 where/what is the usage you'd expect to be flagged?

Self reference or or usage in conditions is allowed (that can be opted-out)

JanKrivanek avatar Nov 20 '25 08:11 JanKrivanek

Actually the default scope being Project is the limiting factor here. Depending on the location of read - it might need to be explicitly set to work tree or All.

JanKrivanek avatar Nov 20 '25 08:11 JanKrivanek

I'd like to still note that it might be worth having this as its own BuildCheck which will warn even if Configuration is available as global property.

If I would run /check in my CI, I'd probably be doing dotnet build MySolution.sln /check. In that case, Configuration property read in Directory.Build.props will be good, and wouldn't be flagged by the existing BuildCheck. However, it's still kinda problematic because if I would later build an individual project (e.g, during some work locally), then I would end up with the issue. And it won't make much sense to run dotnet build /check on all individual projects in CI.

Is that clear and making sense to you?

Youssef1313 avatar Nov 20 '25 10:11 Youssef1313