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) |