diff --git a/src/Dotnet.Script.Core/Commands/ExecuteScriptCommand.cs b/src/Dotnet.Script.Core/Commands/ExecuteScriptCommand.cs index 6bf3809c..5c22b8bc 100644 --- a/src/Dotnet.Script.Core/Commands/ExecuteScriptCommand.cs +++ b/src/Dotnet.Script.Core/Commands/ExecuteScriptCommand.cs @@ -57,7 +57,7 @@ private string GetLibrary(ExecuteScriptCommandOptions executeOptions) return pathToLibrary; } - var options = new PublishCommandOptions(executeOptions.File, executionCacheFolder, "script", PublishType.Library, executeOptions.OptimizationLevel, executeOptions.PackageSources, null, executeOptions.NoCache); + var options = new PublishCommandOptions(executeOptions.File, executionCacheFolder, "script", PublishType.Library, executeOptions.OptimizationLevel, executeOptions.PackageSources, null, executeOptions.NoCache, executeOptions.SDK); new PublishCommand(_scriptConsole, _logFactory).Execute(options); if (hash != null) { @@ -77,7 +77,7 @@ public bool TryCreateHash(ExecuteScriptCommandOptions options, out string hash) var scriptFilesProvider = new ScriptFilesResolver(); var allScriptFiles = scriptFilesProvider.GetScriptFiles(options.File.Path); - var projectFile = new ScriptProjectProvider(_logFactory).CreateProjectFileFromScriptFiles(ScriptEnvironment.Default.TargetFramework, allScriptFiles.ToArray()); + var projectFile = new ScriptProjectProvider(_logFactory).CreateProjectFileFromScriptFiles(ScriptEnvironment.Default.TargetFramework, allScriptFiles.ToArray(), options.SDK); if (!projectFile.IsCacheable) { @@ -93,6 +93,11 @@ public bool TryCreateHash(ExecuteScriptCommandOptions options, out string hash) incrementalHash.AppendData(File.ReadAllBytes(scriptFile)); } + if (!string.IsNullOrWhiteSpace(options.SDK)) + { + incrementalHash.AppendData(Encoding.UTF8.GetBytes(options.SDK)); + } + var configuration = options.OptimizationLevel.ToString(); incrementalHash.AppendData(Encoding.UTF8.GetBytes(configuration)); diff --git a/src/Dotnet.Script.Core/Commands/ExecuteScriptCommandOptions.cs b/src/Dotnet.Script.Core/Commands/ExecuteScriptCommandOptions.cs index 656cb74d..46834cad 100644 --- a/src/Dotnet.Script.Core/Commands/ExecuteScriptCommandOptions.cs +++ b/src/Dotnet.Script.Core/Commands/ExecuteScriptCommandOptions.cs @@ -4,7 +4,7 @@ namespace Dotnet.Script.Core.Commands { public class ExecuteScriptCommandOptions { - public ExecuteScriptCommandOptions(ScriptFile file, string[] arguments, OptimizationLevel optimizationLevel, string[] packageSources, bool isInteractive ,bool noCache) + public ExecuteScriptCommandOptions(ScriptFile file, string[] arguments, OptimizationLevel optimizationLevel, string[] packageSources, bool isInteractive ,bool noCache, string sdk) { File = file; Arguments = arguments; @@ -12,6 +12,7 @@ public ExecuteScriptCommandOptions(ScriptFile file, string[] arguments, Optimiza PackageSources = packageSources; IsInteractive = isInteractive; NoCache = noCache; + SDK = sdk; } public ScriptFile File { get; } @@ -20,5 +21,6 @@ public ExecuteScriptCommandOptions(ScriptFile file, string[] arguments, Optimiza public string[] PackageSources { get; } public bool IsInteractive { get; } public bool NoCache { get; } + public string SDK { get; } } } \ No newline at end of file diff --git a/src/Dotnet.Script.Core/Commands/PublishCommand.cs b/src/Dotnet.Script.Core/Commands/PublishCommand.cs index 684911c0..5bc27532 100644 --- a/src/Dotnet.Script.Core/Commands/PublishCommand.cs +++ b/src/Dotnet.Script.Core/Commands/PublishCommand.cs @@ -32,7 +32,7 @@ public void Execute(PublishCommandOptions options) var scriptEmitter = new ScriptEmitter(_scriptConsole, compiler); var publisher = new ScriptPublisher(_logFactory, scriptEmitter); var code = absoluteFilePath.ToSourceText(); - var context = new ScriptContext(code, absolutePublishDirectory, Enumerable.Empty(), absoluteFilePath, options.OptimizationLevel, packageSources: options.PackageSources); + var context = new ScriptContext(code, absolutePublishDirectory, Enumerable.Empty(), absoluteFilePath, options.OptimizationLevel, packageSources: options.PackageSources, sdk: options.SDK); if (options.PublishType == PublishType.Library) { diff --git a/src/Dotnet.Script.Core/Commands/PublishCommandOptions.cs b/src/Dotnet.Script.Core/Commands/PublishCommandOptions.cs index a82fa295..78cc1467 100644 --- a/src/Dotnet.Script.Core/Commands/PublishCommandOptions.cs +++ b/src/Dotnet.Script.Core/Commands/PublishCommandOptions.cs @@ -5,7 +5,7 @@ namespace Dotnet.Script.Core.Commands { public class PublishCommandOptions { - public PublishCommandOptions(ScriptFile file, string outputDirectory, string libraryName, PublishType publishType, OptimizationLevel optimizationLevel, string[] packageSources, string runtimeIdentifier, bool noCache) + public PublishCommandOptions(ScriptFile file, string outputDirectory, string libraryName, PublishType publishType, OptimizationLevel optimizationLevel, string[] packageSources, string runtimeIdentifier, bool noCache, string sdk) { File = file; OutputDirectory = outputDirectory; @@ -15,6 +15,7 @@ public PublishCommandOptions(ScriptFile file, string outputDirectory, string lib PackageSources = packageSources; RuntimeIdentifier = runtimeIdentifier ?? ScriptEnvironment.Default.RuntimeIdentifier; NoCache = noCache; + SDK = sdk; } public ScriptFile File { get; } @@ -25,6 +26,7 @@ public PublishCommandOptions(ScriptFile file, string outputDirectory, string lib public string[] PackageSources { get; } public string RuntimeIdentifier { get; } public bool NoCache { get; } + public string SDK { get; } } public enum PublishType diff --git a/src/Dotnet.Script.Core/ScriptCompiler.cs b/src/Dotnet.Script.Core/ScriptCompiler.cs index 994cb39f..7580f686 100644 --- a/src/Dotnet.Script.Core/ScriptCompiler.cs +++ b/src/Dotnet.Script.Core/ScriptCompiler.cs @@ -160,17 +160,10 @@ public virtual ScriptCompilationContext CreateCompilationContext(script, context.Code, loader, scriptOptions, runtimeDependencies, nonSuppressedDiagnostics); } - private RuntimeDependency[] GetRuntimeDependencies(ScriptContext context) - { - if (context.ScriptMode == ScriptMode.Script) - { - return RuntimeDependencyResolver.GetDependencies(context.FilePath, context.PackageSources).ToArray(); - } - else - { - return RuntimeDependencyResolver.GetDependenciesForCode(context.WorkingDirectory, context.ScriptMode, context.PackageSources, context.Code.ToString()).ToArray(); - } - } + private RuntimeDependency[] GetRuntimeDependencies(ScriptContext context) + => context.ScriptMode == ScriptMode.Script + ? RuntimeDependencyResolver.GetDependencies(context.FilePath, context.PackageSources, context.SDK).ToArray() + : RuntimeDependencyResolver.GetDependenciesForCode(context.WorkingDirectory, context.ScriptMode, context.PackageSources, context.Code.ToString()).ToArray(); private ScriptOptions AddScriptReferences(ScriptOptions scriptOptions, Dictionary loadedAssembliesMap, Dictionary scriptDependenciesMap) { diff --git a/src/Dotnet.Script.Core/ScriptContext.cs b/src/Dotnet.Script.Core/ScriptContext.cs index 759f2c51..0828491e 100644 --- a/src/Dotnet.Script.Core/ScriptContext.cs +++ b/src/Dotnet.Script.Core/ScriptContext.cs @@ -10,7 +10,7 @@ namespace Dotnet.Script.Core { public class ScriptContext { - public ScriptContext(SourceText code, string workingDirectory, IEnumerable args, string filePath = null, OptimizationLevel optimizationLevel = OptimizationLevel.Debug, ScriptMode scriptMode = ScriptMode.Script, string[] packageSources = null) + public ScriptContext(SourceText code, string workingDirectory, IEnumerable args, string filePath = null, OptimizationLevel optimizationLevel = OptimizationLevel.Debug, ScriptMode scriptMode = ScriptMode.Script, string[] packageSources = null, string sdk = null) { Code = code; WorkingDirectory = workingDirectory; @@ -19,6 +19,7 @@ public ScriptContext(SourceText code, string workingDirectory, IEnumerable(); + SDK = sdk; } public SourceText Code { get; } @@ -34,5 +35,6 @@ public ScriptContext(SourceText code, string workingDirectory, IEnumerable public string TargetFramework { get; set; } = ScriptEnvironment.Default.TargetFramework; + /// + /// Gets or sets the SDK for this . + /// + public string SDK { get; set; } = "Microsoft.NET.Sdk"; + public void Save(string pathToProjectFile) { var projectFileDocument = XDocument.Parse(ReadTemplate("csproj.template")); + projectFileDocument.Root.Add(new XAttribute("Sdk", SDK)); var itemGroupElement = projectFileDocument.Descendants("ItemGroup").Single(); foreach (var packageReference in PackageReferences) { @@ -83,19 +89,15 @@ public void Save(string pathToProjectFile) var targetFrameworkElement = projectFileDocument.Descendants("TargetFramework").Single(); targetFrameworkElement.Value = TargetFramework; - using (var fileStream = new FileStream(pathToProjectFile, FileMode.Create, FileAccess.Write)) - { - projectFileDocument.Save(fileStream); - } + using var fileStream = new FileStream(pathToProjectFile, FileMode.Create, FileAccess.Write); + projectFileDocument.Save(fileStream); } private static string ReadTemplate(string name) { var resourceStream = typeof(ProjectFile).GetTypeInfo().Assembly.GetManifestResourceStream($"Dotnet.Script.DependencyModel.ProjectSystem.{name}"); - using (var streamReader = new StreamReader(resourceStream)) - { - return streamReader.ReadToEnd(); - } + using var streamReader = new StreamReader(resourceStream); + return streamReader.ReadToEnd(); } /// @@ -105,7 +107,8 @@ public bool Equals(ProjectFile other) if (ReferenceEquals(this, other)) return true; return PackageReferences.SequenceEqual(other.PackageReferences) && AssemblyReferences.SequenceEqual(other.AssemblyReferences) - && TargetFramework.Equals(other.TargetFramework); + && TargetFramework.Equals(other.TargetFramework) + && SDK.Equals(other.SDK); } /// diff --git a/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptProjectProvider.cs b/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptProjectProvider.cs index 6b86b512..7ab5c549 100644 --- a/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptProjectProvider.cs +++ b/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptProjectProvider.cs @@ -6,6 +6,7 @@ using Dotnet.Script.DependencyModel.Environment; using Dotnet.Script.DependencyModel.Logging; using Dotnet.Script.DependencyModel.Process; +using Newtonsoft.Json; namespace Dotnet.Script.DependencyModel.ProjectSystem { @@ -79,7 +80,7 @@ public ProjectFileInfo CreateProject(string targetDirectory, string defaultTarge return CreateProject(targetDirectory, Directory.GetFiles(targetDirectory, "*.csx", SearchOption.AllDirectories), defaultTargetFramework, enableNuGetScriptReferences); } - public ProjectFileInfo CreateProject(string targetDirectory, IEnumerable scriptFiles, string defaultTargetFramework = "net46", bool enableNuGetScriptReferences = false) + public ProjectFileInfo CreateProject(string targetDirectory, IEnumerable scriptFiles, string defaultTargetFramework = "net46", bool enableNuGetScriptReferences = false, string sdk = null) { if (scriptFiles == null || !scriptFiles.Any()) { @@ -94,19 +95,19 @@ public ProjectFileInfo CreateProject(string targetDirectory, IEnumerable _logger.Debug($"Creating project file for *.csx files found in {targetDirectory} using {defaultTargetFramework} as the default framework."); - return SaveProjectFileFromScriptFiles(targetDirectory, defaultTargetFramework, scriptFiles.ToArray()); + return SaveProjectFileFromScriptFiles(targetDirectory, defaultTargetFramework, scriptFiles.ToArray(), sdk); } - public ProjectFileInfo CreateProjectForScriptFile(string scriptFile) + public ProjectFileInfo CreateProjectForScriptFile(string scriptFile, string sdk) { _logger.Debug($"Creating project file for {scriptFile}"); var scriptFiles = _scriptFilesResolver.GetScriptFiles(scriptFile); - return SaveProjectFileFromScriptFiles(Path.GetDirectoryName(scriptFile), _scriptEnvironment.TargetFramework, scriptFiles.ToArray()); + return SaveProjectFileFromScriptFiles(Path.GetDirectoryName(scriptFile), _scriptEnvironment.TargetFramework, scriptFiles.ToArray(), sdk); } - private ProjectFileInfo SaveProjectFileFromScriptFiles(string targetDirectory, string defaultTargetFramework, string[] csxFiles) + private ProjectFileInfo SaveProjectFileFromScriptFiles(string targetDirectory, string defaultTargetFramework, string[] csxFiles, string sdk) { - ProjectFile projectFile = CreateProjectFileFromScriptFiles(defaultTargetFramework, csxFiles); + ProjectFile projectFile = CreateProjectFileFromScriptFiles(defaultTargetFramework, csxFiles, sdk); var pathToProjectFile = GetPathToProjectFile(targetDirectory, defaultTargetFramework); projectFile.Save(pathToProjectFile); @@ -116,7 +117,7 @@ private ProjectFileInfo SaveProjectFileFromScriptFiles(string targetDirectory, s return new ProjectFileInfo(pathToProjectFile, NuGetUtilities.GetNearestConfigPath(targetDirectory)); } - public ProjectFile CreateProjectFileFromScriptFiles(string defaultTargetFramework, string[] csxFiles) + public ProjectFile CreateProjectFileFromScriptFiles(string defaultTargetFramework, string[] csxFiles, string sdk) { var parseresult = _scriptParser.ParseFromFiles(csxFiles); @@ -128,6 +129,11 @@ public ProjectFile CreateProjectFileFromScriptFiles(string defaultTargetFramewor } projectFile.TargetFramework = defaultTargetFramework; + if (!string.IsNullOrWhiteSpace(sdk)) + { + projectFile.SDK = sdk; + } + return projectFile; } diff --git a/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template b/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template index 119a3645..4d38b3b9 100644 --- a/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template +++ b/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template @@ -1,10 +1,11 @@ - + Exe netcoreapp2.1 latest + diff --git a/src/Dotnet.Script.DependencyModel/Runtime/RuntimeDependencyResolver.cs b/src/Dotnet.Script.DependencyModel/Runtime/RuntimeDependencyResolver.cs index 7cc1c86e..940ca627 100644 --- a/src/Dotnet.Script.DependencyModel/Runtime/RuntimeDependencyResolver.cs +++ b/src/Dotnet.Script.DependencyModel/Runtime/RuntimeDependencyResolver.cs @@ -41,9 +41,9 @@ private static IRestorer CreateRestorer(LogFactory logFactory, bool useRestoreCa } } - public IEnumerable GetDependencies(string scriptFile, string[] packageSources) + public IEnumerable GetDependencies(string scriptFile, string[] packageSources, string sdk) { - var projectFileInfo = _scriptProjectProvider.CreateProjectForScriptFile(scriptFile); + var projectFileInfo = _scriptProjectProvider.CreateProjectForScriptFile(scriptFile, sdk); _restorer.Restore(projectFileInfo, packageSources); var pathToAssetsFile = Path.Combine(Path.GetDirectoryName(projectFileInfo.Path), "obj", "project.assets.json"); return GetDependenciesInternal(pathToAssetsFile); diff --git a/src/Dotnet.Script.Tests/ScriptPackagesTests.cs b/src/Dotnet.Script.Tests/ScriptPackagesTests.cs index aeb3bebd..f2f4e9ac 100644 --- a/src/Dotnet.Script.Tests/ScriptPackagesTests.cs +++ b/src/Dotnet.Script.Tests/ScriptPackagesTests.cs @@ -105,7 +105,7 @@ public void ShouldGetScriptFilesFromScriptPackage() var resolver = CreateRuntimeDependencyResolver(); var fixture = GetFullPathToTestFixture("ScriptPackage/WithMainCsx"); var csxFiles = Directory.GetFiles(fixture, "*.csx"); - var dependencies = resolver.GetDependencies(csxFiles.First(), Array.Empty()); + var dependencies = resolver.GetDependencies(csxFiles.First(), Array.Empty(), null); var scriptFiles = dependencies.Single(d => d.Name == "ScriptPackageWithMainCsx").Scripts; Assert.NotEmpty(scriptFiles); } @@ -117,7 +117,7 @@ private static string GetFullPathToTestFixture(string path) } - private RuntimeDependencyResolver CreateRuntimeDependencyResolver() + private static RuntimeDependencyResolver CreateRuntimeDependencyResolver() { var resolver = new RuntimeDependencyResolver(TestOutputHelper.CreateTestLogFactory(), useRestoreCache: false); return resolver; diff --git a/src/Dotnet.Script/Program.cs b/src/Dotnet.Script/Program.cs index 54b2c196..2a67d91f 100644 --- a/src/Dotnet.Script/Program.cs +++ b/src/Dotnet.Script/Program.cs @@ -67,6 +67,7 @@ private static int Wain(string[] args) var verbosity = app.Option("--verbosity", " Set the verbosity level of the command. Allowed values are t[trace], d[ebug], i[nfo], w[arning], e[rror], and c[ritical].", CommandOptionType.SingleValue); var nocache = app.Option("--no-cache", "Disable caching (Restore and Dll cache)", CommandOptionType.NoValue); var infoOption = app.Option("--info", "Displays environmental information", CommandOptionType.NoValue); + var sdk = app.Option("--sdk ", "Project SDK to use. Default is \"Microsoft.NET.Sdk\"", CommandOptionType.SingleValue); var argsBeforeDoubleHyphen = args.TakeWhile(a => a != "--").ToArray(); var argsAfterDoubleHyphen = args.SkipWhile(a => a != "--").Skip(1).ToArray(); @@ -181,7 +182,8 @@ private static int Wain(string[] args) commandConfig.ValueEquals("release", StringComparison.OrdinalIgnoreCase) ? OptimizationLevel.Release : OptimizationLevel.Debug, packageSources.Values?.ToArray(), runtime.Value() ?? ScriptEnvironment.Default.RuntimeIdentifier, - nocache.HasValue() + nocache.HasValue(), + sdk.Value() ); var logFactory = CreateLogFactory(verbosity.Value(), debugMode.HasValue()); @@ -244,7 +246,8 @@ private static int Wain(string[] args) optimizationLevel, packageSources.Values?.ToArray(), interactive.HasValue(), - nocache.HasValue() + nocache.HasValue(), + sdk.Value() ); var fileCommand = new ExecuteScriptCommand(ScriptConsole.Default, logFactory); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy