public void CompileCSharp6() { // see https://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status&referringTitle=Documentation const string code1 = @" using System; namespace Whatever { public class Something { // auto-property initializer public int Value { get; set; } = 3; public void DoSomething() { Console.WriteLine(""Hello!""); } public void DoSomething(string[] args) { // conditional access var len = args?.Length ?? 0; } } } "; var compiler = new Compiler(LanguageVersion.CSharp6); compiler.Compile(_tempDir, "Whatever", new Dictionary<string, string> { { "code", code1 } }); Assert.IsTrue(File.Exists(Path.Combine(_tempDir, "Whatever.dll"))); }
public void Compile() { const string code1 = @" using System; namespace Whatever { public class Something { public void DoSomething() { Console.WriteLine(""Hello!""); } } } "; var compiler = new Compiler(); compiler.Compile(_tempDir, "Whatever", new Dictionary<string, string>{{"code", code1}}); Assert.IsTrue(File.Exists(Path.Combine(_tempDir, "Whatever.dll"))); }
// invoked by the API // DISABLED - works but useless, because if we return type models that // reference some Clr types that exist only on the server and not in the // remove app, then what can we do with them? Better do everything on // the server. // //[System.Web.Http.HttpGet] // use the http one, not mvc, with api controllers! //[ModelsBuilderAuthFilter("developer")] // have to use our own, non-cookie-based, auth //public HttpResponseMessage GetTypeModels() //{ // var umbraco = Application.GetApplication(); // var modelTypes = umbraco.GetContentAndMediaTypes(); // return Request.CreateResponse(HttpStatusCode.OK, modelTypes, Configuration.Formatters.JsonFormatter); //} // //public const string GetTypeModelsUrl = ControllerUrl + "/GetTypeModels"; #endregion public static void GenerateModels(string appData, string bin) { var modelsDirectory = Path.Combine(appData, "Models"); if (!Directory.Exists(modelsDirectory)) Directory.CreateDirectory(modelsDirectory); foreach (var file in Directory.GetFiles(modelsDirectory, "*.generated.cs")) File.Delete(file); var umbraco = Application.GetApplication(); var typeModels = umbraco.GetAllTypes(); // using BuildManager references var referencedAssemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToArray(); var ourFiles = Directory.GetFiles(modelsDirectory, "*.cs").ToDictionary(x => x, File.ReadAllText); var parseResult = new CodeParser().Parse(ourFiles, referencedAssemblies); var builder = new TextBuilder(typeModels, parseResult, Config.ModelsNamespace); foreach (var typeModel in builder.GetModelsToGenerate()) { var sb = new StringBuilder(); builder.Generate(sb, typeModel); var filename = Path.Combine(modelsDirectory, typeModel.ClrName + ".generated.cs"); File.WriteAllText(filename, sb.ToString()); } if (bin != null) { foreach (var file in Directory.GetFiles(modelsDirectory, "*.generated.cs")) ourFiles[file] = File.ReadAllText(file); var compiler = new Compiler(); foreach (var asm in referencedAssemblies) compiler.ReferencedAssemblies.Add(asm); compiler.Compile(bin, builder.GetModelsNamespace(), ourFiles); } OutOfDateModelsStatus.Clear(); }