Хотя вы можете решить некоторые аспекты вашего вопроса с помощью обоих пространств имен ( System.CodeDom и System.Reflection.Emit ), вы не можете смешать два разных понятия и использоватьвариант (ы), который лучше всего подходит для того, что вы хотите сделать.
Если вы просто хотите сгенерировать и скомпилировать код C # \ VB, возможно, вы захотите использовать System.CodeDom :
Это пространство имен можно использовать для моделирования структуры документа с исходным кодом, который можно выводить в виде исходного кода на поддерживаемом языке, используя функциональные возможности, предоставляемые System.CodeDom.Compiler. namespace.
Посмотрите на этот небольшой пример того, как определить метод с помощью CodeDom:
// Defines a method that returns a string passed to it.
CodeMemberMethod method1 = new CodeMemberMethod();
method1.Name = "ReturnString";
method1.ReturnType = new CodeTypeReference("System.String");
method1.Parameters.Add( new CodeParameterDeclarationExpression("System.String", "text") );
method1.Statements.Add( new CodeMethodReturnStatement( new CodeArgumentReferenceExpression("text") ) );
// A C# code generator produces the following source code for the preceeding example code:
// private string ReturnString(string text)
// {
// return text;
// }
Что касается системы.Reflection.Emit используется для создания и манипулирования MSIL (Microsoft Intermediate Language), который является низкоуровневым читаемым человеком языком программирования, определяемым спецификацией Common Language Infrastructure и используемым .NET Framework.Обратите внимание, что MSIL теперь известен как CIL (Common Intermediate Language):
Пространство имен System.Reflection.Emit содержит классы, которые позволяют компилятору или инструменту генерировать метаданные и промежуточный язык Microsoft (MSIL) и при необходимостисоздать PE-файл на диске.Основными клиентами этих классов являются скриптовые движки и компиляторы.
Использование этого подхода приводит к изучению инструкций байт-кода CIL, что является довольно сложной и сложной задачей, даже если вы знакомы с ассемблерным кодом.и может быть не идеальным, если то, что вы хотите, достаточно просто и быстро реализуется.Посмотрите статью из Википедии в списке CIL и CIL для первого впечатления.