CSharpCodeProvider Класс

Определение

Предоставляет доступ к экземплярам генератора кода C# и компилятора кода.

public ref class CSharpCodeProvider : System::CodeDom::Compiler::CodeDomProvider
public class CSharpCodeProvider : System.CodeDom.Compiler.CodeDomProvider
type CSharpCodeProvider = class
    inherit CodeDomProvider
Public Class CSharpCodeProvider
Inherits CodeDomProvider
Наследование

Примеры

В следующем примере используется поставщик кода C# или Visual Basic для компиляции исходного файла. В примере проверяется расширение входного файла и используется соответствующий CSharpCodeProvider или VBCodeProvider для компиляции. Входной файл компилируется в исполняемый файл, и все ошибки компиляции отображаются в консоли.

Это важно

Методы CompileAssemblyFrom* не поддерживаются в .NET Core и .NET 5+. Этот пример выполняется только в .NET Framework.

using System;
using System.IO;
using System.Globalization;
using System.CodeDom.Compiler;
using System.Text;
using Microsoft.CSharp;
using Microsoft.VisualBasic;

namespace CodeProviders
{
    class CompileSample
    {
        [STAThread]
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                //  First parameter is the source file name.
                if (File.Exists(args[0]))
                {
                    CompileExecutable(args[0]);
                }
                else
                {
                    Console.WriteLine("Input source file not found - {0}",
                        args[0]);
                }
            }
            else
            {
                Console.WriteLine("Input source file not specified on command line!");
            }
        }

        public static bool CompileExecutable(String sourceName)
        {
            FileInfo sourceFile = new FileInfo(sourceName);
            CodeDomProvider provider = null;
            bool compileOk = false;

            // Select the code provider based on the input file extension.
            if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".CS")
            {
                provider = CodeDomProvider.CreateProvider("CSharp");
            }
            else if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".VB")
            {
                provider = CodeDomProvider.CreateProvider("VisualBasic");
            }
            else
            {
                Console.WriteLine("Source file must have a .cs or .vb extension");
            }

            if (provider != null)
            {

                // Format the executable file name.
                // Build the output assembly path using the current directory
                // and <source>_cs.exe or <source>_vb.exe.

                String exeName = String.Format(@"{0}\{1}.exe",
                    System.Environment.CurrentDirectory,
                    sourceFile.Name.Replace(".", "_"));

                CompilerParameters cp = new CompilerParameters();

                // Generate an executable instead of
                // a class library.
                cp.GenerateExecutable = true;

                // Specify the assembly file name to generate.
                cp.OutputAssembly = exeName;

                // Save the assembly as a physical file.
                cp.GenerateInMemory = false;

                // Set whether to treat all warnings as errors.
                cp.TreatWarningsAsErrors = false;

                // Invoke compilation of the source file.
                CompilerResults cr = provider.CompileAssemblyFromFile(cp,
                    sourceName);

                if(cr.Errors.Count > 0)
                {
                    // Display compilation errors.
                    Console.WriteLine("Errors building {0} into {1}",
                        sourceName, cr.PathToAssembly);
                    foreach(CompilerError ce in cr.Errors)
                    {
                        Console.WriteLine("  {0}", ce.ToString());
                        Console.WriteLine();
                    }
                }
                else
                {
                    // Display a successful compilation message.
                    Console.WriteLine("Source {0} built into {1} successfully.",
                        sourceName, cr.PathToAssembly);
                }

                // Return the results of the compilation.
                if (cr.Errors.Count > 0)
                {
                    compileOk = false;
                }
                else
                {
                    compileOk = true;
                }
            }
            return compileOk;
        }
    }
}
Imports System.IO
Imports System.Globalization
Imports System.CodeDom.Compiler
Imports System.Text
Imports Microsoft.CSharp

Namespace CodeProviders
    Class CompileSample
        <STAThread()>  _
        Public Shared Sub Main(args() As String)

            If args.Length > 0
                ' First parameter is the source file name.
                If File.Exists(args(0))
                    CompileExecutable(args(0))
                Else 
                    Console.WriteLine("Input source file not found - {0}", _
                        args(0))
                End If
            
            Else
                Console.WriteLine("Input source file not specified on command line!")
            End If
        End Sub

        Public Shared Function CompileExecutable(sourceName As String) As Boolean
            Dim sourceFile As FileInfo = New FileInfo(sourceName)
            Dim provider As CodeDomProvider = Nothing
            Dim compileOk As Boolean = False

            ' Select the code provider based on the input file extension.
            If sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".CS"

                provider = CodeDomProvider.CreateProvider("CSharp")

            ElseIf sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".VB"

                provider = CodeDomProvider.CreateProvider("VisualBasic")

            Else
                Console.WriteLine("Source file must have a .cs or .vb extension")
            End If

            If Not provider Is Nothing

                ' Format the executable file name.
                ' Build the output assembly path using the current directory
                ' and <source>_cs.exe or <source>_vb.exe.

                Dim exeName As String = String.Format("{0}\{1}.exe", _
                    System.Environment.CurrentDirectory, _
                    sourceFile.Name.Replace(".", "_"))

                Dim cp As CompilerParameters = new CompilerParameters()

                ' Generate an executable instead of 
                ' a class library.
                cp.GenerateExecutable = True

                ' Specify the assembly file name to generate.
                cp.OutputAssembly = exeName
    
                ' Save the assembly as a physical file.
                cp.GenerateInMemory = False
    
                ' Set whether to treat all warnings as errors.
                cp.TreatWarningsAsErrors = False
 
                ' Invoke compilation of the source file.
                Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, _
                    sourceName)
    
                If cr.Errors.Count > 0
                    ' Display compilation errors.
                    Console.WriteLine("Errors building {0} into {1}", _
                        sourceName, cr.PathToAssembly)

                    Dim ce As CompilerError
                    For Each ce In cr.Errors
                        Console.WriteLine("  {0}", ce.ToString())
                        Console.WriteLine()
                    Next ce
                Else
                    ' Display a successful compilation message.
                    Console.WriteLine("Source {0} built into {1} successfully.", _
                        sourceName, cr.PathToAssembly)
                End If
              
                ' Return the results of the compilation.
                If cr.Errors.Count > 0
                    compileOk = False
                Else 
                    compileOk = True
                End If
            End If
            return compileOk

        End Function
    End Class
End Namespace

Комментарии

Этот класс предоставляет методы, которые можно использовать для получения экземпляров C# ICodeGenerator и ICodeCompiler реализаций.

Note

Этот класс содержит запрос ссылки и запрос наследования на уровне класса, которые применяются ко всем членам. SecurityException возникает, когда ни непосредственный вызывающий объект, ни производный класс не имеют разрешения на полное доверие.

Конструкторы

Имя Описание
CSharpCodeProvider()

Инициализирует новый экземпляр класса CSharpCodeProvider.

CSharpCodeProvider(IDictionary<String,String>)

Инициализирует новый экземпляр CSharpCodeProvider класса с помощью указанных параметров поставщика.

Свойства

Имя Описание
CanRaiseEvents

Возвращает значение, указывающее, может ли компонент вызвать событие.

(Унаследовано от Component)
Container

Возвращает объект IContainer , содержащий Componentобъект .

(Унаследовано от Component)
DesignMode

Возвращает значение, указывающее, находится ли текущий Component режим разработки.

(Унаследовано от Component)
Events

Возвращает список обработчиков событий, подключенных к этому Component.

(Унаследовано от Component)
FileExtension

Возвращает расширение имени файла, используемое при создании файлов исходного кода.

LanguageOptions

Возвращает идентификатор функций языка.

(Унаследовано от CodeDomProvider)
Site

Возвращает или задает ISite объект Component.

(Унаследовано от Component)

Методы

Имя Описание
CompileAssemblyFromDom(CompilerParameters, CodeCompileUnit[])

Компилирует сборку на System.CodeDom основе деревьев, содержащихся в указанном массиве объектов, с помощью указанных CodeCompileUnit параметров компилятора.

(Унаследовано от CodeDomProvider)
CompileAssemblyFromFile(CompilerParameters, String[])

Компилирует сборку из исходного кода, содержащегося в указанных файлах, с помощью указанных параметров компилятора.

(Унаследовано от CodeDomProvider)
CompileAssemblyFromSource(CompilerParameters, String[])

Компилирует сборку из указанного массива строк, содержащих исходный код, с помощью указанных параметров компилятора.

(Унаследовано от CodeDomProvider)
CreateCompiler()
Устаревшие..

Возвращает экземпляр компилятора кода C#.

CreateEscapedIdentifier(String)

Создает escape-идентификатор для указанного значения.

(Унаследовано от CodeDomProvider)
CreateGenerator()
Устаревшие..

Возвращает экземпляр генератора кода C#.

CreateGenerator(String)

При переопределении в производном классе создает новый генератор кода, используя указанное имя файла для выходных данных.

(Унаследовано от CodeDomProvider)
CreateGenerator(TextWriter)

При переопределении в производном классе создает новый генератор кода, используя указанный TextWriter для выходных данных.

(Унаследовано от CodeDomProvider)
CreateObjRef(Type)

Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
CreateParser()
Устаревшие..

При переопределении в производном классе создает новый средство синтаксического анализа кода.

(Унаследовано от CodeDomProvider)
CreateValidIdentifier(String)

Создает допустимый идентификатор для указанного значения.

(Унаследовано от CodeDomProvider)
Dispose()

Освобождает все ресурсы, используемые параметром Component.

(Унаследовано от Component)
Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые Component и при необходимости освобождает управляемые ресурсы.

(Унаследовано от Component)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GenerateCodeFromCompileUnit(CodeCompileUnit, TextWriter, CodeGeneratorOptions)

Создает код для указанной единицы компиляции объектной модели документа кода (CodeDOM) и отправляет его в указанный модуль записи текста с помощью указанных параметров.

(Унаследовано от CodeDomProvider)
GenerateCodeFromExpression(CodeExpression, TextWriter, CodeGeneratorOptions)

Создает код для указанного выражения объектной модели документа кода (CodeDOM) и отправляет его в указанный модуль записи текста с помощью указанных параметров.

(Унаследовано от CodeDomProvider)
GenerateCodeFromMember(CodeTypeMember, TextWriter, CodeGeneratorOptions)

Создает код для указанного члена класса с помощью указанных параметров записи текста и генератора кода.

GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions)

Создает код для указанного пространства имен объектной модели документа кода (CodeDOM) и отправляет его в указанный модуль записи текста с помощью указанных параметров.

(Унаследовано от CodeDomProvider)
GenerateCodeFromStatement(CodeStatement, TextWriter, CodeGeneratorOptions)

Создает код для указанной инструкции Code Document Object Model (CodeDOM) и отправляет его в указанный модуль записи текста с помощью указанных параметров.

(Унаследовано от CodeDomProvider)
GenerateCodeFromType(CodeTypeDeclaration, TextWriter, CodeGeneratorOptions)

Создает код для указанного объявления типа объектной модели документа кода (CodeDOM) и отправляет его в указанный модуль записи текста с помощью указанных параметров.

(Унаследовано от CodeDomProvider)
GetConverter(Type)

TypeConverter Возвращает значение для указанного типа объекта.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()

Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
GetService(Type)

Возвращает объект, представляющий службу, предоставляемую Component или ее Container.

(Унаследовано от Component)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
GetTypeOutput(CodeTypeReference)

Возвращает тип, указанный указанным CodeTypeReference.

(Унаследовано от CodeDomProvider)
InitializeLifetimeService()

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
IsValidIdentifier(String)

Возвращает значение, указывающее, является ли указанное значение допустимым идентификатором текущего языка.

(Унаследовано от CodeDomProvider)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неглубокую копию текущего MarshalByRefObject объекта.

(Унаследовано от MarshalByRefObject)
Parse(TextReader)

Компилирует код, считывающийся из указанного текстового потока, в объект CodeCompileUnit.

(Унаследовано от CodeDomProvider)
Supports(GeneratorSupport)

Возвращает значение, указывающее, предоставляется ли указанная поддержка создания кода.

(Унаследовано от CodeDomProvider)
ToString()

String Возвращает имя, содержащее имя , если таковое Componentимеется. Этот метод не должен быть переопределен.

(Унаследовано от Component)

События

Имя Описание
Disposed

Происходит при удалении компонента вызовом Dispose() метода.

(Унаследовано от Component)

Применяется к

См. также раздел