Esempio n. 1
0
        /// <summary>
        /// Инициализирует новый экземпляр класса <see cref="Compiler"/>
        /// </summary>
        /// <param name="Language">Язык программирования, используемый для сборки проекта</param>
        public Compiler(CompilerLanguage Language)
        {
            // Установка языка программирования обрабатываемый компилятором
            this.Language = Language;

            // Установка параметров компилятора по умолчанию
            this.Parameters = new CompilerParameters
            {
                // Создаётся исполняемый файл вместо библиотеки классов.
                GenerateExecutable = true,

                // Создание отладочной информации.
                IncludeDebugInformation = false,

                // Сохранение сборки, как физический файл.
                GenerateInMemory = true,

                // Уровень, на котором компилятор должен начать отображать предупреждения.
                WarningLevel = 4,

                // Рассмотр всех предупреждений как ошибки.
                TreatWarningsAsErrors = false,

                // Аргумент компилятора для оптимизации вывода.
                // "/optimize"   - Включает (или отключает) оптимизацию.
                // "/platform"   - Пределы, какие платформы этот код можно запускать на: x86, Itanium, x64, AnyCPU или anycpu32bitpreferred. По умолчанию AnyCPU.
                // "/target"     - Задает формат выходного файла с помощью одного из четырех вариантов: /target:appcontainerexe, /target:exe, /target:library, /target:module, /target:winexe, /target:winmdobj.
                // "/unsafe"     - Позволяет небезопасный код.
                CompilerOptions = "/optimize"
            };
        }
Esempio n. 2
0
        /// <summary>
        /// Сохраняет данные в файл "Resources.Designer.*".
        /// </summary>
        /// <param name="File">Расположение файла</param>
        /// <param name="Assembly">Имя сборки</param>
        /// <param name="Language">Язык программирования</param>
        public void Save(String File, String Assembly, CompilerLanguage Language)
        {
            using (FileStream FS = new FileStream(File, FileMode.Create))
            {
                Byte[] Buffer = new UTF8Encoding(true).GetBytes(ToString(Assembly, Language));
                FS.Write(Buffer, 0, Buffer.Length);

                FS.Close();
                FS.Dispose();
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Gets path to compiler.
        /// </summary>
        /// <param name="lang"></param>
        /// <returns></returns>
        public static string GetPath(CompilerLanguage lang)
        {
            string name = GetFileName(lang);

            var dirs = lang == CompilerLanguage.FSharp
                                       ? FSharpDirs
                                       : FrameworkRoots();

            return(dirs.Where(dir => Directory.Exists(dir))
                   .Select(dir => Path.Combine(dir, name))
                   .FirstOrDefault(path => File.Exists(path))
                   ?? "");
        }
Esempio n. 4
0
        static string GetFileName(CompilerLanguage lang)
        {
            switch (lang)
            {
            case CompilerLanguage.CSharp: return("csc.exe");

            case CompilerLanguage.VB: return("vbc.exe");

            case CompilerLanguage.JSharp: return("jsc.exe");

            case CompilerLanguage.FSharp: return("fsc.exe");

            default: throw new ArgumentOutOfRangeException("lang");
            }
        }
Esempio n. 5
0
        public static string SimpleRun(CompilerLanguage lang, string input, string output, bool debug, bool optimize)
        {
            var options = new CompilerOptions
            {
                Language = lang,
                Debug    = debug,
                Optimize = optimize,
                Unsafe   = true
            };

            options.Input.Add(input);
            options.Output = output;
            string res = Run(options, true);

            if (HasErrors(res))
            {
                return(res);
            }
            return(null);
        }
Esempio n. 6
0
        /// <summary>
        /// Инициализирует новый экземпляр класса <see cref="Project"/>
        /// </summary>
        /// <param name="Name">Имя сборки</param>
        /// <param name="Language">Язык программирования</param>
        public Project(String Name, CompilerLanguage Language)
        {
            this.Name     = Name.Replace(new Char[] { ' ', '?', '!', '@', '`', '~', '$', '%', '^', ':', '&', '*', '(', ')', '=', '+', '<', '>', ',', '/', '\\', '\"', '«', '»', '—', '-', '№', '#' }, '_');
            this.Language = Language;

            // Установка списка связанных сборок по умолчанию
            ReferencedAssemblies = new List <String>()
            {
                "mscorlib.dll",
                "Microsoft.CSharp.dll",
                "System.dll",
                "System.Core.dll",
                "System.Data.dll",
                "System.Data.DataSetExtensions.dll",
                "System.Deployment.dll",
                "System.Drawing.dll",
                "System.Net.Http.dll",
                "System.Windows.Forms.dll",
                "System.Xml.dll",
                "System.Xml.Linq.dll",
            };
        }
Esempio n. 7
0
        /// <summary>
        /// Преобразует значение данного экземпляра в еквивалентное ему строковое представление.
        /// </summary>
        /// <param name="Assembly">Имя сборки</param>
        /// <param name="Language">Язык программирования</param>
        /// <returns></returns>
        public String ToString(String Assembly, CompilerLanguage Language)
        {
            List <String> Result;

            switch (Language)
            {
            case CompilerLanguage.CSharp:
                Result = new List <String>()
                {
                    "namespace " + Assembly + ".Properties",
                    "{",
                    "    /// <summary>",
                    "    /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.",
                    "    /// </summary>",
                    "    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]",
                    "    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]",
                    "    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]",
                    "    internal class Resources",
                    "    {",
                    "        private static global::System.Resources.ResourceManager resourceMan;",
                    "        private static global::System.Globalization.CultureInfo resourceCulture;",
                    "",
                    "        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]",
                    "        internal Resources() { }",
                    "",
                    "        /// <summary>",
                    "        /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.",
                    "        /// </summary>",
                    "        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]",
                    "        internal static global::System.Resources.ResourceManager ResourceManager",
                    "        {",
                    "            get",
                    "            {",
                    "                if (object.ReferenceEquals(resourceMan, null))",
                    "                {",
                    "                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"" + Assembly + ".Properties.Resources\", typeof(Resources).Assembly);",
                    "                    resourceMan = temp;",
                    "                }",
                    "                return resourceMan;",
                    "            }",
                    "        }",
                    "",
                    "        /// <summary>",
                    "        /// Перезаписывает свойство CurrentUICulture текущего потока для всех обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.",
                    "        /// </summary>",
                    "        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]",
                    "        internal static global::System.Globalization.CultureInfo Culture",
                    "        {",
                    "            get { return resourceCulture; }",
                    "            set { resourceCulture = value; }",
                    "        }"
                };

                foreach (KeyValuePair <String, Object> Resource in List)
                {
                    Result.Add("");
                    Result.Add("        /// <summary>");
                    Result.Add("        /// Поиск локализованного ресурса типа " + Resource.Value.GetType().ToString() + ".");
                    Result.Add("        /// </summary>");
                    Result.Add("        internal static " + Resource.Value.GetType().ToString() + " " + Resource.Key + " {");
                    Result.Add("            get {");
                    Result.Add("                object obj = ResourceManager.GetObject(\"" + Resource.Key + "\", resourceCulture);");
                    Result.Add("                return ((" + Resource.Value.GetType().ToString() + ")(obj));");
                    Result.Add("            }");
                    Result.Add("        }");
                }

                Result.Add("    }");
                Result.Add("}");
                break;

            case CompilerLanguage.Basic:
                Result = new List <String>()
                {
                    "Option Strict On",
                    "Option Explicit On",
                    "",
                    "Imports System",
                    "",
                    "Namespace My.Resources",
                    "",
                    "    ''' <summary>",
                    "    ''' Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.",
                    "    ''' </summary>",
                    "    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"15.0.0.0\"),  _",
                    "     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _",
                    "     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _",
                    "     Global.Microsoft.VisualBasic.HideModuleNameAttribute()>  _",
                    "    Friend Module Resources",
                    "",
                    "        Private resourceMan As Global.System.Resources.ResourceManager",
                    "        Private resourceCulture As Global.System.Globalization.CultureInfo",
                    "",
                    "        ''' <summary>",
                    "        ''' Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.",
                    "        ''' </summary>",
                    "        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _",
                    "        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager",
                    "            Get",
                    "                If Object.ReferenceEquals(resourceMan, Nothing) Then",
                    "                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager(\"" + Assembly + ".Resources\", GetType(Resources).Assembly)",
                    "                    resourceMan = temp",
                    "                End If",
                    "                Return resourceMan",
                    "            End Get",
                    "        End Property",
                    "",
                    "        ''' <summary>",
                    "        ''' Перезаписывает свойство CurrentUICulture текущего потока для всех обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.",
                    "        ''' </summary>",
                    "        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _",
                    "        Friend Property Culture() As Global.System.Globalization.CultureInfo",
                    "            Get Return resourceCulture End Get",
                    "            Set resourceCulture = value End Set",
                    "        End Property"
                };

                foreach (KeyValuePair <String, Object> Resource in List)
                {
                    Result.Add("");
                    Result.Add("        ''' <summary>");
                    Result.Add("        ''' Поиск локализованного ресурса типа " + Resource.Value.GetType().ToString() + ".");
                    Result.Add("        ''' </summary>");
                    Result.Add("        Friend ReadOnly Property " + Resource.Key + "() As " + Resource.Value.GetType().ToString() + "");
                    Result.Add("            Get");
                    Result.Add("                Dim obj As Object = ResourceManager.GetObject(\"" + Resource.Key + "\", resourceCulture)");
                    Result.Add("                Return CType(obj, " + Resource.Value.GetType().ToString() + ")");
                    Result.Add("            End Get");
                    Result.Add("        End Property");
                }

                Result.Add("");
                Result.Add("    End Module");
                Result.Add("End Namespace");
                break;

            default:
                return(this.GetType().ToString());
            }

            return(Result.Aggregate("", (Content, Item) => Content += Item + Environment.NewLine));
        }
Esempio n. 8
0
 /// <summary>
 /// initialize instance
 /// </summary>
 /// <param name="language">programming language type</param>
 /// <param name="sourceCode">source code text</param>
 public DynamicCompiler(CompilerLanguage language, string sourceCode)
 {
     intLanguage   = language;
     strSourceCode = sourceCode;
 }
Esempio n. 9
0
 public CompilerSettings(CompilerLanguage compiler = CompilerLanguage.CSharp)
 {
     _compilerLang = compiler;
 }
Esempio n. 10
0
        private static void SetCompilerOptions(TestCase tc, CompilerLanguage lang, CompilerOptions options)
        {
            options.Language = lang;
            options.Debug    = tc.Debug;
            options.Optimize = tc.Optimize;
            options.Unsafe   = tc.Unsafe;
            options.Output   = tc.ExePath;
            options.Target   = CompilerTarget.ConsoleApp;
            options.NoLogo   = true;
            options.Checked  = false;

            options.Define("TARGET_JVM");             //to remove unsafe
            options.Define("NET_2_0");
            options.Defines.AddRange(tc.Defines);

            if (tc.VM == VM.CLR)
            {
                options.Define("MSCLR");
            }
            else if (tc.VM == VM.AVM)
            {
                options.Define("AVM");
            }

            //common refs
            if (tc.VM == VM.AVM)
            {
                GlobalSettings.AddCommonReferences(options);

                options.AddRef(Path.Combine(GlobalSettings.LibsDirectory, "flash.v10.2.dll"));

                options.NoConfig = true;
                options.NoStdlib = true;

                if (lang == CompilerLanguage.VB)
                {
                    //options.NoVBRuntime = true;
                    options.VBRuntime = GlobalSettings.Libs.VBRuntime;
                    //options.CompactFramework = true;
                    options.SDKPath = GlobalSettings.Dirs.Libs;
                    options.NoWarn  = true;
                }
            }
            else
            {
                options.AddRef("System.Core.dll");
            }

            if (tc.IsNUnit)
            {
                if (tc.VM == VM.CLR)
                {
                    string nunit = QA.GetNUnitFrameworkPath(GlobalOptions.UseCommonDirectory ? "" : tc.Root);
                    options.AddRef(nunit);
                }
                else
                {
                    options.AddRef(GlobalSettings.GetLibPath(QA.NUnitFrameworkDll));
                }
                options.AddRef(tc.GetNUnitTestsPath(tc.Root));
            }

            options.Input.AddRange(tc.SourceFiles.Names);
        }
Esempio n. 11
0
        /// <summary>
        /// Преобразует значение данного экземпляра в еквивалентное ему строковое представление.
        /// </summary>
        /// <param name="Language">Язык программирования</param>
        /// <returns></returns>
        public String ToString(CompilerLanguage Language)
        {
            List <String> Result;

            switch (Language)
            {
            case CompilerLanguage.CSharp:
                Result = new List <String>
                {
                    "using System.Reflection;",
                    "using System.Runtime.CompilerServices;",
                    "using System.Runtime.InteropServices;",
                    "",
                    "// Общие сведения об этой сборке предоставляются следующим набором набора атрибутов.",
                    "// Измените значения этих атрибутов, чтобы изменить сведения, связанные со сборкой.",
                    $"[assembly: AssemblyTitle(\"{this.Title}\")]",
                    $"[assembly: AssemblyDescription(\"{this.Description}\")]",
                    $"[assembly: AssemblyConfiguration(\"{this.Configuration}\")]",
                    $"[assembly: AssemblyCompany(\"{this.Company}\")]",
                    $"[assembly: AssemblyProduct(\"{this.Product}\")]",
                    $"[assembly: AssemblyCopyright(\"{this.Copyright}\")]",
                    $"[assembly: AssemblyTrademark(\"{this.Trademark}\")]",
                    $"[assembly: AssemblyCulture(\"{this.Culture}\")]",
                    "",
                    "// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми для компонентов COM.",
                    "// Если необходимо обратиться к типу в этой сборке через COM, задайте атрибуту ComVisible значение TRUE для этого типа.",
                    $"[assembly: ComVisible({this.ComVisible.ToString().ToLower()})]",
                    "",
                    "// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM",
                    "// [assembly: Guid(\"\")]",
                    "",
                    "// Сведения о версии сборки состоят из следующих четырех значений:",
                    "//",
                    "//      Основной номер версии",
                    "//      Дополнительный номер версии",
                    "//      Номер сборки",
                    "//      Редакция",
                    "//",
                    "// Можно задать все значения или принять номер сборки и номер редакции по умолчанию, используя \"*\", как показано ниже:",
                    "// [assembly: AssemblyVersion(\"1.0.*\")]",
                    "",
                    "// Сведения о версии сборки.",
                    $"[assembly: AssemblyVersion(\"{this.Version.ToString()}\")]",
                    $"[assembly: AssemblyFileVersion(\"{this.FileVersion.ToString()}\")]"
                };
                break;

            case CompilerLanguage.Basic:
                Result = new List <String>
                {
                    "Imports System",
                    "Imports System.Reflection",
                    "Imports System.Runtime.InteropServices",
                    "",
                    "' Общие сведения об этой сборке предоставляются следующим набором атрибутов.",
                    "' Измените значения этих атрибутов, чтобы изменить общие сведения об этой сборке.",
                    $"<Assembly: AssemblyTitle(\"{this.Title}\")>",
                    $"<Assembly: AssemblyDescription(\"{this.Description}\")>",
                    $"<assembly: AssemblyConfiguration(\"{this.Configuration}\")>",
                    $"<Assembly: AssemblyCompany(\"{this.Company}\")>",
                    $"<Assembly: AssemblyProduct(\"{this.Product}\")>",
                    $"<Assembly: AssemblyCopyright(\"{this.Copyright}\")>",
                    $"<Assembly: AssemblyTrademark(\"{this.Trademark}\")>",
                    $"<assembly: AssemblyCulture(\"{this.Culture}\")>",
                    "",
                    $"<Assembly: ComVisible(\"{this.ComVisible.ToString().ToLower()}\")>",
                    "",
                    "' Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM",
                    "' <Assembly: Guid(\"\")>",
                    "",
                    "' Сведения о версии сборки состоят из следующих четырех значений:",
                    "'",
                    "'      Основной номер версии",
                    "'      Дополнительный номер версии",
                    "'      Номер сборки",
                    "'      Редакция",
                    "'",
                    "' Можно задать все значения или принять номер сборки и номер редакции по умолчанию, используя \"*\", как показано ниже:",
                    "' <Assembly: AssemblyVersion(\"1.0.*\")>",
                    "",
                    $"<Assembly: AssemblyVersion(\"{this.Version.ToString()}\")>",
                    $"<Assembly: AssemblyFileVersion(\"{this.FileVersion.ToString()}\")>",
                };
                break;

            default:
                Result = new List <String>
                {
                    $"Title: {this.Title}",
                    $"Description: {this.Description}",
                    $"Configuration: {this.Configuration}",
                    $"Company: {this.Company}",
                    $"Product: {this.Product}",
                    $"Copyright: {this.Copyright}",
                    $"Trademark: {this.Trademark}",
                    $"Culture: {this.Culture}",
                    "",
                    $"ComVisible: {this.ComVisible.ToString().ToLower()}",
                    "",
                    $"Version: {this.Version.ToString()}",
                    $"FileVersion: {this.FileVersion.ToString()}",
                };
                break;
            }

            return(Result.Aggregate("", (Content, Item) => Content += Item + Environment.NewLine));
        }