From ae2638a79b63a64d80ed740e5b511a75dea778ee Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Fri, 16 May 2025 11:40:13 +0200 Subject: [PATCH] Fix versioned sdk imports in file-based programs --- .../Run/VirtualProjectBuildingCommand.cs | 24 ++++++++++++++----- .../CommandTests/Run/RunFileTests.cs | 23 ++++++++++++++++-- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs b/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs index 31f869e635b7..3758f0456363 100644 --- a/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs +++ b/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs @@ -510,9 +510,7 @@ public static void WriteProjectFile( { if (isVirtualProject) { - writer.WriteLine($""" - - """); + WriteImport(writer, "Sdk.props", sdk); } else if (sdk.Version is null) { @@ -629,9 +627,7 @@ public static void WriteProjectFile( foreach (var sdk in sdkDirectives) { - writer.WriteLine($""" - - """); + WriteImport(writer, "Sdk.targets", sdk); } if (!sdkDirectives.Any()) @@ -679,6 +675,22 @@ Override targets which don't work with project files that are not present on dis """); static string EscapeValue(string value) => SecurityElement.Escape(value); + + static void WriteImport(TextWriter writer, string project, CSharpDirective.Sdk sdk) + { + if (sdk.Version is null) + { + writer.WriteLine($""" + + """); + } + else + { + writer.WriteLine($""" + + """); + } + } } /// diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index a0ecc44e6388..56c46702b718 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -973,6 +973,25 @@ public void PackageReference_CentralVersion() """); } + [Fact] // https://github.com/dotnet/sdk/issues/48990 + public void SdkReference() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:sdk Microsoft.NET.Sdk + #:sdk Aspire.AppHost.Sdk 9.2.1 + #:package Aspire.Hosting.AppHost@9.2.1 + + var builder = DistributedApplication.CreateBuilder(args); + builder.Build().Run(); + """); + + new DotnetCommand(Log, "build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + } + [Fact] public void UpToDate() { @@ -1176,7 +1195,7 @@ public void Api() - + Exe @@ -1207,7 +1226,7 @@ public void Api() - +