Skip to content

Instantly share code, notes, and snippets.

@vbfox
Last active December 14, 2016 15:57
Show Gist options
  • Save vbfox/ffd0466e0793503ff62c to your computer and use it in GitHub Desktop.
Save vbfox/ffd0466e0793503ff62c to your computer and use it in GitHub Desktop.
Launching a scriptcs .csx file from FAKE
#r @"packages/FAKE/tools/FakeLib.dll"
#load "./scriptcs.fsx"
open Fake
open Fake.AssemblyInfoFile
open Fake.ReleaseNotesHelper
open System
open System.IO
open Fake.ScriptCs
let rootDir = FullName (__SOURCE_DIRECTORY__)
Target "Default" <| fun _ ->
let script = rootDir </> "test.csx"
ScriptCsHelper.run script
RunTargetOrDefault "Default"
source https://nuget.org/api/v2
nuget ExternalAnnotationsGenerator
nuget FAKE
nuget ScriptCs.Hosting
nuget ScriptCs.Engine.Roslyn
nuget ScriptCs.Engine.Mono
#r @"packages/FAKE/tools/FakeLib.dll"
#r @"packages/Common.Logging.Core/lib/net40/Common.Logging.Core.dll"
#r @"packages/Common.Logging/lib/net40/Common.Logging.dll"
#r @"packages/Autofac/lib/net40/Autofac.dll"
#r @"packages/Autofac.Mef/lib/net45/Autofac.Integration.Mef.dll"
#r @"packages/ScriptCs.Core/lib/net45/ScriptCs.Core.dll"
#r @"packages/ScriptCs.Contracts/lib/net45/ScriptCs.Contracts.dll"
#r @"packages/ScriptCs.Hosting/lib/net45/ScriptCs.Hosting.dll"
#r @"packages/Roslyn.Compilers.Common/lib/net45/Roslyn.Compilers.dll"
#r @"packages/Roslyn.Compilers.CSharp/lib/net45/Roslyn.Compilers.CSharp.dll"
#r @"packages/ScriptCs.Engine.Roslyn/lib/net45/ScriptCs.Engine.Roslyn.dll"
#r @"packages/ScriptCs.Engine.Mono/lib/net45/ScriptCs.Engine.Mono.dll"
namespace Fake.ScriptCs
module ScriptCsHelper =
open Fake
open ScriptCs.Contracts
open ScriptCs.Hosting
open ScriptCs.Engine.Mono
open ScriptCs.Engine.Roslyn
let getServices () =
let console = new ScriptCs.Hosting.ScriptConsole()
let log = new ScriptCs.Hosting.ColoredConsoleLogProvider(LogLevel.Warn, console)
let servicesBuilder = new ScriptServicesBuilder(console, log)
if isMono then
servicesBuilder.ScriptEngine<MonoScriptEngine>() |> ignore
else
servicesBuilder.ScriptEngine<RoslynScriptEngine>() |> ignore
servicesBuilder.Build()
let run scriptFile =
logfn "Running ScriptCs script '%s'" scriptFile
let services = getServices()
let workingDirectory = services.FileSystem.GetWorkingDirectory(scriptFile)
let assemblyPaths =
[workingDirectory]
|> List.filter (fun p -> p <> null)
|> Seq.collect (fun d -> services.AssemblyResolver.GetAssemblyPaths(d))
|> List.ofSeq
let packs = services.ScriptPackResolver.GetPacks()
services.Executor.Initialize(assemblyPaths, packs)
services.Executor.Execute scriptFile |> ignore
services.Executor.Terminate()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment