# SDK and MSBuild Breaking Changes (.NET 10) These changes affect the .NET SDK, CLI tooling, NuGet, and MSBuild behavior. ## Source-Incompatible Changes ### NU1510 raised for direct references pruned by NuGet If NuGet prunes a direct `PackageReference` because the package is already part of the shared framework, a `NU1510` warning is raised. Remove the explicit reference if it's provided by the framework. ### PackageReference without a version raises an error Every `` must now have a `Version` attribute or use Central Package Management. Missing versions raise an error instead of resolving to the latest. ### Other source-incompatible changes - `dnx.ps1` file removed from .NET SDK — remove any references - File-level directives (`#r`, `#load`) no longer accept double-quoted paths — remove the quotes (e.g., `#r MyLib.dll` instead of `#r "MyLib.dll"`) - `project.json` no longer recognized by `dotnet restore` — use `PackageReference` format - NuGet packages with no runtime assets excluded from `deps.json` - `ToolCommandName` not set for non-tool packages - HTTP sources in `dotnet package list`/`dotnet package search` now error (use HTTPS) ## Behavioral Changes ### `dotnet new sln` defaults to SLNX file format `dotnet new sln` now generates an XML-based `.slnx` file instead of the classic `.sln` format: ```xml ``` **Mitigation:** Use `dotnet new sln --format sln` for the classic format. Ensure your tooling (Visual Studio, Rider, etc.) supports SLNX. ### Other behavioral changes - `--interactive` defaults to `true` in user scenarios — use `--interactive false` in scripts - CLI diagnostic output now goes to stderr - Tool packages now include RID-specific content - Default workload management mode is 'workload sets' (not 'loose manifests') - `EnableDynamicNativeInstrumentation` defaults to false for code coverage - `dotnet package list` performs restore before listing - `dotnet tool install --local` creates manifest by default - `dotnet watch` logs to stderr instead of stdout - `PrunePackageReference` privatizes direct prunable references (`PrivateAssets="All"`) - SHA-1 fingerprints deprecated in `dotnet nuget sign` — use SHA-256 - `MSBUILDCUSTOMBUILDEVENTWARNING` escape hatch removed - MSBuild custom culture resource handling changed - `NUGET_ENABLE_ENHANCED_HTTP_RETRY` env var removed (enhanced retry always on) - NuGet logs errors for invalid package IDs