BuildCheck: Warn when reading Configuration early
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.
FYI @rainersigwald.
Closely related to https://github.com/modelcontextprotocol/csharp-sdk/pull/990
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.
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 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)
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.
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?