diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index f803924c..1072bdeb 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -12,9 +12,8 @@ jobs:
uses: actions/setup-dotnet@v3
with:
dotnet-version: |
- 6.0.x
- 7.0.x
8.0.x
+ 9.0.x
include-prerelease: true
- name: Install dotnet-script
run: dotnet tool install dotnet-script --global
@@ -23,7 +22,7 @@ jobs:
run: dotnet-script build/Build.csx
build-mac:
- runs-on: macos-latest
+ runs-on: macos-13
steps:
- uses: actions/checkout@v3
@@ -31,9 +30,8 @@ jobs:
uses: actions/setup-dotnet@v3
with:
dotnet-version: |
- 6.0.x
- 7.0.x
8.0.x
+ 9.0.x
include-prerelease: true
- name: Install dotnet-script
run: dotnet tool install dotnet-script --global
@@ -50,9 +48,8 @@ jobs:
uses: actions/setup-dotnet@v3
with:
dotnet-version: |
- 6.0.x
- 7.0.x
8.0.x
+ 9.0.x
include-prerelease: true
- name: Install dotnet-script
run: dotnet tool install dotnet-script --global
diff --git a/.gitignore b/.gitignore
index 860e9507..62f574c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -266,3 +266,4 @@ project.json
/dotnet-script
/.vscode
/src/Dotnet.Script/Properties/launchSettings.json
+.DS_Store
diff --git a/README.md b/README.md
index f67e8cc7..3482c176 100644
--- a/README.md
+++ b/README.md
@@ -8,19 +8,22 @@ Run C# scripts from the .NET CLI, define NuGet packages inline and edit/debug th
## NuGet Packages
-| Name | Version | Framework(s) |
-| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- |
-| `dotnet-script` (global tool) | [](https://www.nuget.org/packages/dotnet-script/) | `net6.0`, `net7.0` |
-| `Dotnet.Script` (CLI as Nuget) | [](https://www.nuget.org/packages/dotnet.script/) | `net6.0`, `net7.0` |
-| `Dotnet.Script.Core` | [](https://www.nuget.org/packages/Dotnet.Script.Core/) | `net6.0` , `netstandard2.0` |
-| `Dotnet.Script.DependencyModel` | [](https://www.nuget.org/packages/Dotnet.Script.DependencyModel/) | `netstandard2.0` |
-| `Dotnet.Script.DependencyModel.Nuget` | [](https://www.nuget.org/packages/Dotnet.Script.DependencyModel.Nuget/) | `netstandard2.0` |
+| Name | Version | Framework(s) |
+| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- |
+| `dotnet-script` (global tool) | [](https://www.nuget.org/packages/dotnet-script/) | `net8.0`,`net9.0` |
+| `Dotnet.Script` (CLI as Nuget) | [](https://www.nuget.org/packages/dotnet.script/) | `net8.0`,`net9.0` |
+| `Dotnet.Script.Core` | [](https://www.nuget.org/packages/Dotnet.Script.Core/) | `net8.0`,`net9.0`,`netstandard2.0` |
+| `Dotnet.Script.DependencyModel` | [](https://www.nuget.org/packages/Dotnet.Script.DependencyModel/) | `netstandard2.0` |
+| `Dotnet.Script.DependencyModel.Nuget` | [](https://www.nuget.org/packages/Dotnet.Script.DependencyModel.Nuget/) | `netstandard2.0` |
## Installing
### Prerequisites
-The only thing we need to install is [.Net 6.0 or .Net 7.0](https://www.microsoft.com/net/download/core).
+The only thing we need to install is [.NET 8.0 or .NET 9.0 SDK](https://dotnet.microsoft.com/en-us/download/dotnet).
+
+[Note](https://learn.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual#manual-install):
+> If you install the .NET SDK to a non-default location, you need to set the environment variable `DOTNET_ROOT` to the directory that contains the dotnet executable
### .NET Core Global Tool
diff --git a/build/Build.csx b/build/Build.csx
index 684f6602..3aa8a709 100644
--- a/build/Build.csx
+++ b/build/Build.csx
@@ -1,4 +1,4 @@
-#load "nuget:Dotnet.Build, 0.7.1"
+#load "nuget:Dotnet.Build, 0.23.0"
#load "nuget:dotnet-steps, 0.0.1"
#load "nuget:github-changelog, 0.1.5"
#load "BuildContext.csx"
@@ -33,7 +33,7 @@ await StepRunner.Execute(Args);
private void CreateGitHubReleaseAsset()
{
- DotNet.Publish(dotnetScriptProjectFolder, publishArtifactsFolder, "net6.0");
+ DotNet.Publish(dotnetScriptProjectFolder, publishArtifactsFolder, "net8.0");
Zip(publishArchiveFolder, pathToGitHubReleaseAsset);
}
@@ -58,7 +58,8 @@ private void CreateNuGetPackages()
private void RunTests()
{
- DotNet.Test(testProjectFolder);
+ Command.Execute("dotnet", "test -c Release -f net8.0", testProjectFolder);
+ Command.Execute("dotnet", "test -c Release -f net9.0", testProjectFolder);
if (BuildEnvironment.IsWindows)
{
DotNet.Test(testDesktopProjectFolder);
@@ -86,7 +87,8 @@ private async Task PublishRelease()
Git.Default.RequireCleanWorkingTree();
await ReleaseManagerFor(owner, projectName, BuildEnvironment.GitHubAccessToken)
.CreateRelease(Git.Default.GetLatestTag(), pathToReleaseNotes, new[] { new ZipReleaseAsset(pathToGitHubReleaseAsset) });
- NuGet.TryPush(nuGetArtifactsFolder);
+
+ DotNet.TryPush(nuGetArtifactsFolder);
}
}
diff --git a/build/BuildContext.csx b/build/BuildContext.csx
index 6cf4505b..1cfeeb07 100644
--- a/build/BuildContext.csx
+++ b/build/BuildContext.csx
@@ -1,4 +1,4 @@
-#load "nuget:Dotnet.Build, 0.7.1"
+#load "nuget:Dotnet.Build, 0.23.0"
using static FileUtils;
using System.Xml.Linq;
@@ -7,7 +7,7 @@ const string GlobalToolPackageId = "dotnet-script";
var owner = "filipw";
var projectName = "dotnet-script";
var root = FileUtils.GetScriptFolder();
-var solutionFolder = Path.Combine(root,"..","src");
+var solutionFolder = Path.Combine(root, "..", "src");
var dotnetScriptProjectFolder = Path.Combine(root, "..", "src", "Dotnet.Script");
var dotnetScriptCoreProjectFolder = Path.Combine(root, "..", "src", "Dotnet.Script.Core");
var dotnetScriptDependencyModelProjectFolder = Path.Combine(root, "..", "src", "Dotnet.Script.DependencyModel");
diff --git a/build/omnisharp.json b/build/omnisharp.json
index 74b7fc1b..945a3c21 100644
--- a/build/omnisharp.json
+++ b/build/omnisharp.json
@@ -1,6 +1,6 @@
{
"script": {
"enableScriptNuGetReferences": true,
- "defaultTargetFramework": "net6.0"
+ "defaultTargetFramework": "net8.0"
}
}
\ No newline at end of file
diff --git a/global.json b/global.json
index 090e95c7..97614a3d 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "8.0.100",
+ "version": "9.0.100",
"rollForward": "latestFeature"
}
}
diff --git a/src/.vscode/tasks.json b/src/.vscode/tasks.json
index e35e8bda..d778ce8d 100644
--- a/src/.vscode/tasks.json
+++ b/src/.vscode/tasks.json
@@ -46,7 +46,7 @@
"-c",
"release",
"-f",
- "net7.0",
+ "net9.0",
"${workspaceFolder}/Dotnet.Script.Tests/DotNet.Script.Tests.csproj"
],
"problemMatcher": "$msCompile",
diff --git a/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj b/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj
index fc33ff5d..94dd6e45 100644
--- a/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj
+++ b/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj
@@ -2,9 +2,9 @@
A cross platform library allowing you to run C# (CSX) scripts with support for debugging and inline NuGet packages. Based on Roslyn.
- 1.5.0
+ 1.6.0
filipw
- net8.0;net7.0;net6.0;netstandard2.0
+ net9.0;net8.0;netstandard2.0
Dotnet.Script.Core
Dotnet.Script.Core
script;csx;csharp;roslyn
@@ -24,18 +24,18 @@
-
-
-
+
+
+
-
+
-
+
\ No newline at end of file
diff --git a/src/Dotnet.Script.Core/Scaffolder.cs b/src/Dotnet.Script.Core/Scaffolder.cs
index b07e911e..8e52acc1 100644
--- a/src/Dotnet.Script.Core/Scaffolder.cs
+++ b/src/Dotnet.Script.Core/Scaffolder.cs
@@ -81,6 +81,7 @@ public void RegisterFileHandler()
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
// register dotnet-script as the tool to process .csx files
+ _commandRunner.Execute("reg", @"delete HKCU\Software\classes\.csx /f");
_commandRunner.Execute("reg", @"add HKCU\Software\classes\.csx /f /ve /t REG_SZ /d dotnetscript");
_commandRunner.Execute("reg", $@"add HKCU\Software\Classes\dotnetscript\Shell\Open\Command /f /ve /t REG_EXPAND_SZ /d ""\""%ProgramFiles%\dotnet\dotnet.exe\"" script \""%1\"" -- %*""");
}
@@ -141,7 +142,7 @@ private void CreateLaunchConfiguration(string currentWorkingDirectory)
_scriptConsole.WriteNormal("Creating VS Code launch configuration file");
string pathToLaunchFile = Path.Combine(vsCodeDirectory, "launch.json");
string installLocation = _scriptEnvironment.InstallLocation;
- bool isInstalledAsGlobalTool = installLocation.Contains(".dotnet/tools", StringComparison.OrdinalIgnoreCase);
+ bool isInstalledAsGlobalTool = installLocation.Contains($".dotnet{Path.DirectorySeparatorChar}tools", StringComparison.OrdinalIgnoreCase);
string dotnetScriptPath = Path.Combine(installLocation, "dotnet-script.dll").Replace(@"\", "/");
string launchFileContent;
if (!File.Exists(pathToLaunchFile))
diff --git a/src/Dotnet.Script.Core/ScriptPublisher.cs b/src/Dotnet.Script.Core/ScriptPublisher.cs
index 15452b66..faaf6b05 100644
--- a/src/Dotnet.Script.Core/ScriptPublisher.cs
+++ b/src/Dotnet.Script.Core/ScriptPublisher.cs
@@ -11,7 +11,7 @@ namespace Dotnet.Script.Core
{
public class ScriptPublisher
{
- private const string ScriptingVersion = "4.8.0-3.final";
+ private const string ScriptingVersion = "4.11.0";
private readonly ScriptProjectProvider _scriptProjectProvider;
private readonly ScriptEmitter _scriptEmitter;
@@ -57,7 +57,7 @@ public void CreateAssembly(ScriptContext context, LogFactory log
// only display published if we aren't auto publishing to temp folder
if (!scriptAssemblyPath.StartsWith(FileUtils.GetTempPath()))
{
- _scriptConsole.WriteSuccess($"Published {context.FilePath} to { scriptAssemblyPath}");
+ _scriptConsole.WriteSuccess($"Published {context.FilePath} to {scriptAssemblyPath}");
}
}
diff --git a/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj b/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj
index 5d81c138..c2794916 100644
--- a/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj
+++ b/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj
@@ -1,5 +1,5 @@
-
-
+
+
netstandard2.0
MIT
@@ -8,7 +8,7 @@
https://github.com/dotnet-script/dotnet-script.git
git
script;csx;csharp;roslyn;nuget
- 1.5.0
+ 1.6.0
A MetadataReferenceResolver that allows inline nuget references to be specified in script(csx) files.
dotnet-script
dotnet-script
@@ -16,11 +16,10 @@
true
../dotnet-script.snk
-
-
+
-
+
\ No newline at end of file
diff --git a/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj b/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj
index f32e05eb..a0be1fb6 100644
--- a/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj
+++ b/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj
@@ -1,5 +1,5 @@
-
-
+
+
netstandard2.0
dotnet-script
@@ -11,29 +11,24 @@
https://github.com/dotnet-script/dotnet-script.git
git
script;csx;csharp;roslyn;omnisharp
- 1.5.0
+ 1.6.0
latest
true
../dotnet-script.snk
-
-
ScriptParser.cs
-
-
-
+
-
-
+
\ No newline at end of file
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.Desktop.Tests/Dotnet.Script.Desktop.Tests.csproj b/src/Dotnet.Script.Desktop.Tests/Dotnet.Script.Desktop.Tests.csproj
index cbe23b97..5d609576 100644
--- a/src/Dotnet.Script.Desktop.Tests/Dotnet.Script.Desktop.Tests.csproj
+++ b/src/Dotnet.Script.Desktop.Tests/Dotnet.Script.Desktop.Tests.csproj
@@ -1,32 +1,29 @@
-
-
+
+
net472
true
../dotnet-script.snk
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers
-
+
-
-
PreserveNewest
-
-
+
\ No newline at end of file
diff --git a/src/Dotnet.Script.Extras/Dotnet.Script.Extras.csproj b/src/Dotnet.Script.Extras/Dotnet.Script.Extras.csproj
index 60cc7930..c79a5f84 100644
--- a/src/Dotnet.Script.Extras/Dotnet.Script.Extras.csproj
+++ b/src/Dotnet.Script.Extras/Dotnet.Script.Extras.csproj
@@ -1,8 +1,8 @@
-
-
+
+
Extensions and add ons to C# scripting
- 0.2.0
+ 0.3.0
netstandard2.0
Dotnet.Script.Extras
Dotnet.Script.Extras
@@ -10,10 +10,8 @@
false
false
-
-
-
+
+
-
-
+
\ No newline at end of file
diff --git a/src/Dotnet.Script.Shared.Tests/Dotnet.Script.Shared.Tests.csproj b/src/Dotnet.Script.Shared.Tests/Dotnet.Script.Shared.Tests.csproj
index 2b928e99..2365de7b 100644
--- a/src/Dotnet.Script.Shared.Tests/Dotnet.Script.Shared.Tests.csproj
+++ b/src/Dotnet.Script.Shared.Tests/Dotnet.Script.Shared.Tests.csproj
@@ -1,18 +1,15 @@
+
-
netstandard2.0
true
../dotnet-script.snk
-
-
+
-
-
-
+
\ No newline at end of file
diff --git a/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj b/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj
index 671dd886..4b8b7da5 100644
--- a/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj
+++ b/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj
@@ -1,6 +1,7 @@
+
- net8.0;net7.0;net6.0
+ net9.0;net8.0
false
true
../dotnet-script.snk
@@ -10,14 +11,14 @@
runtime; build; native; contentfiles; analyzers
all
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers
-
+
diff --git a/src/Dotnet.Script.Tests/ScaffoldingTests.cs b/src/Dotnet.Script.Tests/ScaffoldingTests.cs
index 6051ac73..8335de59 100644
--- a/src/Dotnet.Script.Tests/ScaffoldingTests.cs
+++ b/src/Dotnet.Script.Tests/ScaffoldingTests.cs
@@ -179,7 +179,7 @@ public void ShouldUpdatePathToDotnetScript()
[Fact]
public void ShouldCreateUnifiedLaunchFileWhenInstalledAsGlobalTool()
{
- Scaffolder scaffolder = CreateTestScaffolder("somefolder/.dotnet/tools/dotnet-script");
+ Scaffolder scaffolder = CreateTestScaffolder($"somefolder{Path.DirectorySeparatorChar}.dotnet{Path.DirectorySeparatorChar}tools{Path.DirectorySeparatorChar}dotnet-script");
using var scriptFolder = new DisposableFolder();
scaffolder.InitializerFolder("main.csx", scriptFolder.Path);
@@ -191,7 +191,7 @@ public void ShouldCreateUnifiedLaunchFileWhenInstalledAsGlobalTool()
public void ShouldUpdateToUnifiedLaunchFileWhenInstalledAsGlobalTool()
{
Scaffolder scaffolder = CreateTestScaffolder("some-install-folder");
- Scaffolder globalToolScaffolder = CreateTestScaffolder("somefolder/.dotnet/tools/dotnet-script");
+ Scaffolder globalToolScaffolder = CreateTestScaffolder($"somefolder{Path.DirectorySeparatorChar}.dotnet{Path.DirectorySeparatorChar}tools{Path.DirectorySeparatorChar}dotnet-script");
using var scriptFolder = new DisposableFolder();
scaffolder.InitializerFolder("main.csx", scriptFolder.Path);
var fileContent = File.ReadAllText(Path.Combine(scriptFolder.Path, ".vscode", "launch.json"));
diff --git a/src/Dotnet.Script.Tests/ScriptExecutionTests.cs b/src/Dotnet.Script.Tests/ScriptExecutionTests.cs
index 8bb5fd96..f42a4a3a 100644
--- a/src/Dotnet.Script.Tests/ScriptExecutionTests.cs
+++ b/src/Dotnet.Script.Tests/ScriptExecutionTests.cs
@@ -250,7 +250,9 @@ public void ShouldSupportInlineNugetReferencesWithTrailingSemicoloninEvaluatedCo
[Theory]
[InlineData("https://gist.githubusercontent.com/seesharper/5d6859509ea8364a1fdf66bbf5b7923d/raw/0a32bac2c3ea807f9379a38e251d93e39c8131cb/HelloWorld.csx",
- "Hello World")]
+ "Hello World")]
+ [InlineData("http://gist.githubusercontent.com/seesharper/5d6859509ea8364a1fdf66bbf5b7923d/raw/0a32bac2c3ea807f9379a38e251d93e39c8131cb/HelloWorld.csx",
+ "Hello World")]
[InlineData("https://github.com/dotnet-script/dotnet-script/files/5035247/hello.csx.gz",
"Hello, world!")]
public void ShouldExecuteRemoteScript(string url, string output)
@@ -259,14 +261,6 @@ public void ShouldExecuteRemoteScript(string url, string output)
Assert.Contains(output, result.Output);
}
- [Fact]
- public void ShouldExecuteRemoteScriptUsingTinyUrl()
- {
- var url = "https://tinyurl.com/y8cda9zt";
- var (output, _) = ScriptTestRunner.Default.Execute(url);
- Assert.Contains("Hello World", output);
- }
-
[Fact]
public void ShouldHandleIssue268()
{
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
diff --git a/src/Dotnet.Script/Dotnet.Script.csproj b/src/Dotnet.Script/Dotnet.Script.csproj
index 67bb0123..e33e4619 100644
--- a/src/Dotnet.Script/Dotnet.Script.csproj
+++ b/src/Dotnet.Script/Dotnet.Script.csproj
@@ -2,10 +2,10 @@
Dotnet CLI tool allowing you to run C# (CSX) scripts.
- 1.5.0
+ 1.6.0
filipw
Dotnet.Script
- net8.0;net7.0;net6.0
+ net9.0;net8.0
portable
dotnet-script
Exe
@@ -25,13 +25,10 @@
../dotnet-script.snk
-
-
-
-
-
+
+
+
+