From df73e88830774699b3f1f5b16a9ea7051977b5ee Mon Sep 17 00:00:00 2001 From: Joshua Brink Date: Sun, 8 Sep 2024 23:07:16 +0200 Subject: [PATCH] Fixes #723 shebang before sdk --- .../ProjectSystem/ScriptParser.cs | 2 +- .../ScriptProjectProviderTests.cs | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptParser.cs b/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptParser.cs index 0d058a21..9222a220 100644 --- a/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptParser.cs +++ b/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptParser.cs @@ -53,7 +53,7 @@ public ParseResult ParseFromFiles(IEnumerable csxFiles) private static string ReadSdkFromReferenceDirective(string fileContent) { const string pattern = DirectivePatternPrefix + "r" + SdkDirectivePatternSuffix; - var match = Regex.Match(fileContent, pattern); + var match = Regex.Match(fileContent, pattern, RegexOptions.Multiline); if (match.Success) { var sdk = match.Groups[1].Value; diff --git a/src/Dotnet.Script.Tests/ScriptProjectProviderTests.cs b/src/Dotnet.Script.Tests/ScriptProjectProviderTests.cs index 9d87775f..fdc3bc03 100644 --- a/src/Dotnet.Script.Tests/ScriptProjectProviderTests.cs +++ b/src/Dotnet.Script.Tests/ScriptProjectProviderTests.cs @@ -40,5 +40,17 @@ public void ShouldUseSpecifiedSdk() var projectFileInfo = provider.CreateProject(TestPathUtils.GetPathToTestFixtureFolder("WebApi"), _scriptEnvironment.TargetFramework, true); Assert.Equal("Microsoft.NET.Sdk.Web", XDocument.Load(projectFileInfo.Path).Descendants("Project").Single().Attributes("Sdk").Single().Value); } + + // See: https://github.com/dotnet-script/dotnet-script/issues/723 + [Theory] + [InlineData("#!/usr/bin/env dotnet-script\n#r \"sdk:Microsoft.NET.Sdk.Web\"")] + [InlineData("#!/usr/bin/env dotnet-script\n\n#r \"sdk:Microsoft.NET.Sdk.Web\"")] + public void ShouldHandleShebangBeforeSdk(string code) + { + var parser = new ScriptParser(TestOutputHelper.CreateTestLogFactory()); + var result = parser.ParseFromCode(code); + + Assert.Equal("Microsoft.NET.Sdk.Web", result.Sdk); + } } } \ No newline at end of file