the_alex_mark

Динамическая компиляция кода

Mar 24th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.02 KB | None | 0 0
  1. // Предоставляет доступ к экземплярам генератора кода C# и компилятора кода
  2. CSharpCodeProvider Provider = new CSharpCodeProvider();
  3.  
  4. // Параметры компилятора
  5. CompilerParameters Parameters = new CompilerParameters
  6. {
  7.     // Создаётся исполняемый файл вместо библиотеки классов.
  8.     GenerateExecutable = true,
  9.  
  10.     // Полное имя файла сборки.
  11.     OutputAssembly = "Output.exe",
  12.  
  13.     // Создание отладочной информации.
  14.     IncludeDebugInformation = false,
  15.  
  16.     // Сохранение сборки, как физический файл.
  17.     GenerateInMemory = true,
  18.  
  19.     // Уровень, на котором компилятор должен начать отображать предупреждения.
  20.     WarningLevel = 3,
  21.  
  22.     // Рассмотр всех предупреждений как ошибки.
  23.     TreatWarningsAsErrors = false,
  24.  
  25.     // Аргумент компилятора для оптимизации вывода.
  26.     // "/optimize"   - Включает ( или отключает) оптимизацию.
  27.     // "/platform"   - Пределы, какие платформы этот код можно запускать на: x86, Itanium, x64, AnyCPU или anycpu32bitpreferred. По умолчанию AnyCPU.
  28.     // "/target"     - Задает формат выходного файла с помощью одного из четырех вариантов: /target:appcontainerexe, /target:exe, /target:library, /target:module, /target:winexe, /target:winmdobj.
  29.     // "/unsafe"     - Позволяет небезопасный код.
  30.     CompilerOptions = "/optimize /target:winexe",
  31.  
  32.     // Установка временной коллекции файлов.
  33.     // TempFileCollection хранит временные файлы, созданные во время сборки в текущем каталоге, и не удаляет их после компиляции.
  34.     TempFiles = new TempFileCollection(".", true)
  35. };
  36.  
  37. if (Provider.Supports(GeneratorSupport.EntryPointMethod))
  38. {
  39.     // Класс, содержащий основной метод исполняемого файла.
  40.     Parameters.MainClass = "Test.Program";
  41. }
  42.  
  43. if (Directory.Exists("Resources"))
  44. {
  45.     if (Provider.Supports(GeneratorSupport.Resources))
  46.     {
  47.         // Установка встроенного файла ресурсов сборки.
  48.         // Это полезно для нейтральных к культуре ресурсов или ресурсов по умолчанию (резервных).
  49.         Parameters.EmbeddedResources.Add("Resources\\Default.resources");
  50.  
  51.         // Установка связанных справочных файлов ресурсов сборки.
  52.         // Эти ресурсы включены в отдельные файлы сборки, обычно локализованные для определенного языка и культуры.
  53.         Parameters.LinkedResources.Add("Resources\\nb-no.resources");
  54.     }
  55. }
  56.  
  57. // Подключение библиотек
  58. Parameters.ReferencedAssemblies.Add("System.dll");
  59. Parameters.ReferencedAssemblies.Add("mscorlib.dll");
  60. Parameters.ReferencedAssemblies.Add("System.Data.dll");
  61. Parameters.ReferencedAssemblies.Add("System.Core.dll");
  62. Parameters.ReferencedAssemblies.Add("System.Xml.Linq.dll");
  63. Parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
  64. Parameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
  65. Parameters.ReferencedAssemblies.Add("System.Deployment.dll");
  66. Parameters.ReferencedAssemblies.Add("System.Drawing.dll");
  67. Parameters.ReferencedAssemblies.Add("System.Net.Http.dll");
  68. Parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
  69. Parameters.ReferencedAssemblies.Add("System.Xml.dll");
  70.  
  71. // Список исполняемых файлов
  72. String[] Files = new String[]
  73. {
  74.     @"D:\System\User\Документы\Projects Visual Studio\TestCompiler\TestCompiler\Form1.cs",
  75.     @"D:\System\User\Документы\Projects Visual Studio\TestCompiler\TestCompiler\Form1.Designer.cs",
  76.     //@"D:\System\User\Документы\Projects Visual Studio\TestCompiler\TestCompiler\Form1.resx",
  77.     @"D:\System\User\Документы\Projects Visual Studio\TestCompiler\TestCompiler\Program.cs",
  78.     //@"D:\System\User\Документы\Projects Visual Studio\TestCompiler\TestCompiler\TestCompiler.csproj"
  79. };
  80.  
  81. // Компиляция кода
  82. CompilerResults Result Provider.CompileAssemblyFromFile(Parameters, Files);
  83.  
  84. // Вывод ошибок компилятора
  85. String Errors = "";
  86. for (int i = 0; i < Results.Errors.Count; i++)
  87. {
  88.     Errors += "Номер ошибки: " + Results.Errors[i].ErrorNumber + "\n" + "Позиция: [" + Results.Errors[i].Line + ", " + Results.Errors[i].Column + "]\n" + Results.Errors[i].ErrorText;
  89.     Errors += (i < Results.Errors.Count - 1) ? "\n\n" : "";
  90. }
Add Comment
Please, Sign In to add comment