public void CreateAssembly <TReturn, THost>(ScriptContext context, LogFactory logFactory, string assemblyFileName = null) { Directory.CreateDirectory(context.WorkingDirectory); Directory.CreateDirectory(Path.Combine(context.WorkingDirectory, "obj")); assemblyFileName = assemblyFileName ?? Path.GetFileNameWithoutExtension(context.FilePath); var scriptAssemblyPath = CreateScriptAssembly <TReturn, THost>(context, context.WorkingDirectory, assemblyFileName); var tempProjectPath = ScriptProjectProvider.GetPathToProjectFile(Path.GetDirectoryName(context.FilePath), ScriptEnvironment.Default.TargetFramework); var tempProjectDirecory = Path.GetDirectoryName(tempProjectPath); var sourceProjectAssetsPath = Path.Combine(tempProjectDirecory, "obj", "project.assets.json"); var destinationProjectAssetsPath = Path.Combine(context.WorkingDirectory, "obj", "project.assets.json"); File.Copy(sourceProjectAssetsPath, destinationProjectAssetsPath, overwrite: true); var sourceNugetPropsPath = Path.Combine(tempProjectDirecory, "obj", "script.csproj.nuget.g.props"); var destinationNugetPropsPath = Path.Combine(context.WorkingDirectory, "obj", "script.csproj.nuget.g.props"); File.Copy(sourceNugetPropsPath, destinationNugetPropsPath, overwrite: true); // only display published if we aren't auto publishing to temp folder if (!scriptAssemblyPath.StartsWith(FileUtils.GetTempPath())) { _scriptConsole.WriteSuccess($"Published {context.FilePath} to { scriptAssemblyPath}"); } }
public void CreateNewScriptFile(string fileName, string currentDirectory) { _scriptConsole.WriteNormal($"Creating '{fileName}'"); if (!Path.HasExtension(fileName)) { fileName = Path.ChangeExtension(fileName, ".csx"); } var pathToScriptFile = Path.Combine(currentDirectory, fileName); if (!File.Exists(pathToScriptFile)) { var scriptFileTemplate = TemplateLoader.ReadTemplate("helloworld.csx.template"); File.WriteAllText(pathToScriptFile, scriptFileTemplate); _scriptConsole.WriteSuccess($"...'{pathToScriptFile}' [Created]"); } else { _scriptConsole.WriteHighlighted($"...'{pathToScriptFile}' already exists [Skipping]"); } }
public void CreateAssembly <TReturn, THost>(ScriptContext context, LogFactory logFactory, string assemblyFileName = null) { Directory.CreateDirectory(context.WorkingDirectory); Directory.CreateDirectory(Path.Combine(context.WorkingDirectory, "obj")); assemblyFileName = assemblyFileName ?? Path.GetFileNameWithoutExtension(context.FilePath); var scriptAssemblyPath = CreateScriptAssembly <TReturn, THost>(context, context.WorkingDirectory, assemblyFileName); var tempProjectPath = ScriptProjectProvider.GetPathToProjectFile(Path.GetDirectoryName(context.FilePath)); var tempProjectDirecory = Path.GetDirectoryName(tempProjectPath); var sourceProjectAssetsPath = Path.Combine(tempProjectDirecory, "obj", "project.assets.json"); var destinationProjectAssetsPath = Path.Combine(context.WorkingDirectory, "obj", "project.assets.json"); File.Copy(sourceProjectAssetsPath, destinationProjectAssetsPath, overwrite: true); var sourceNugetPropsPath = Path.Combine(tempProjectDirecory, "obj", "script.csproj.nuget.g.props"); var destinationNugetPropsPath = Path.Combine(context.WorkingDirectory, "obj", "script.csproj.nuget.g.props"); File.Copy(sourceNugetPropsPath, destinationNugetPropsPath, overwrite: true); _scriptConsole.WriteSuccess($"Published {context.FilePath} to { scriptAssemblyPath}"); }
public void CreateNewScriptFile(string fileName, string currentDirectory) { _scriptConsole.WriteNormal($"Creating '{fileName}'"); if (!Path.HasExtension(fileName)) { fileName = Path.ChangeExtension(fileName, ".csx"); } var pathToScriptFile = Path.Combine(currentDirectory, fileName); if (!File.Exists(pathToScriptFile)) { var scriptFileTemplate = TemplateLoader.ReadTemplate("helloworld.csx.template"); if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { // add a shebang to set dotnet-script as the interpreter for .csx files // and make sure we are using environment newlines, because shebang won't work with windows cr\lf scriptFileTemplate = $"#!/usr/bin/env dotnet-script" + Environment.NewLine + scriptFileTemplate.Replace("\r\n", Environment.NewLine); } File.WriteAllText(pathToScriptFile, scriptFileTemplate, new UTF8Encoding(false /* Linux shebang can't handle BOM */)); if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { // mark .csx file as executable, this activates the shebang to run dotnet-script as interpreter _commandRunner.Execute($"/bin/chmod", $"+x {pathToScriptFile}"); } _scriptConsole.WriteSuccess($"...'{pathToScriptFile}' [Created]"); } else { _scriptConsole.WriteHighlighted($"...'{pathToScriptFile}' already exists [Skipping]"); } }