Regex.CompileToAssembly Метод

Определение

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

Перегрузки

CompileToAssembly(RegexCompilationInfo[], AssemblyName)
Является устаревшей.

Компилирует один или несколько указанных объектов Regex в именованную сборку.

CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[])
Является устаревшей.

Компилирует один или несколько указанных объектов Regex в именованную сборку с заданными атрибутами.

CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String)
Является устаревшей.

Компилирует один или несколько указанных объектов Regex и указанный файл ресурсов в именованную сборку с заданными атрибутами.

Комментарии

Примечание

В .NET Core и .NET 5+, вызовы Regex.CompileToAssembly метода вызывают исключение PlatformNotSupportedException. Написание сборки не поддерживается.

CompileToAssembly(RegexCompilationInfo[], AssemblyName)

Внимание!

Regex.CompileToAssembly is obsolete and not supported. Use the RegexGeneratorAttribute with the regular expression source generator instead.

Компилирует один или несколько указанных объектов Regex в именованную сборку.

public:
 static void CompileToAssembly(cli::array <System::Text::RegularExpressions::RegexCompilationInfo ^> ^ regexinfos, System::Reflection::AssemblyName ^ assemblyname);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname);
[System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the RegexGeneratorAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname);
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName -> unit
[<System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the RegexGeneratorAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName -> unit
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName)

Параметры

regexinfos
RegexCompilationInfo[]

Массив, описывающий регулярные выражения для компилирования.

assemblyname
AssemblyName

Имя файла сборки.

Атрибуты

Исключения

Значением свойства Name параметра assemblyname является пустая или нулевая строка.

-или- Шаблон регулярного выражения одного или более объектов в regexinfos содержит недопустимый синтаксис.

Параметр assemblyname или regexinfos имеет значение null.

только .NET Core и .NET 5+. Создание сборки скомпилированных регулярных выражений не поддерживается.

Примеры

В следующем примере создается сборка с именем RegexLib.dll. Сборка включает два скомпилированных регулярных выражения. Во-первых, Utilities.RegularExpressions.DuplicatedStringсоответствует двум идентичным смежным словам. Во-вторых, Utilities.RegularExpressions.EmailAddressпроверяет, имеет ли строка правильный формат адреса электронной почты.

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text.RegularExpressions;

public class RegexCompilationTest
{
   public static void Main()
   {
      RegexCompilationInfo expr;
      List<RegexCompilationInfo> compilationList = new List<RegexCompilationInfo>();

      // Define regular expression to detect duplicate words
      expr = new RegexCompilationInfo(@"\b(?<word>\w+)\s+(\k<word>)\b", 
                 RegexOptions.IgnoreCase | RegexOptions.CultureInvariant, 
                 "DuplicatedString", 
                 "Utilities.RegularExpressions", 
                 true);
      // Add info object to list of objects
      compilationList.Add(expr);

      // Define regular expression to validate format of email address
      expr = new RegexCompilationInfo(@"^(?("")(""[^""]+?""@)|(([0-9A-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9A-Z])@))" + 
                 @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9A-Z][-\w]*[0-9A-Z]\.)+[A-Z]{2,6}))$", 
                 RegexOptions.IgnoreCase | RegexOptions.CultureInvariant, 
                 "EmailAddress", 
                 "Utilities.RegularExpressions", 
                 true);
      // Add info object to list of objects
      compilationList.Add(expr);
                                             
      // Generate assembly with compiled regular expressions
      RegexCompilationInfo[] compilationArray = new RegexCompilationInfo[compilationList.Count];
      AssemblyName assemName = new AssemblyName("RegexLib, Version=1.0.0.1001, Culture=neutral, PublicKeyToken=null");
      compilationList.CopyTo(compilationArray); 
      Regex.CompileToAssembly(compilationArray, assemName);                                                 
   }
}
Imports System.Collections.Generic
Imports System.Reflection
Imports System.Text.RegularExpressions

Module RegexCompilationTest
   Public Sub Main()
      Dim expr As RegexCompilationInfo
      Dim compilationList As New List(Of RegexCompilationInfo)
          
      ' Define regular expression to detect duplicate words
      expr = New RegexCompilationInfo("\b(?<word>\w+)\s+(\k<word>)\b", _
                 RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant, _
                 "DuplicatedString", _
                 "Utilities.RegularExpressions", _
                 True)
      ' Add info object to list of objects
      compilationList.Add(expr)

      ' Define regular expression to validate format of email address
      expr = New RegexCompilationInfo("^(?("")(""[^""]+?""@)|(([0-9A-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9A-Z])@))" + _
                 "(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9A-Z][-\w]*[0-9A-Z]\.)+[A-Z]{2,6}))$", _
                 RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant, _
                 "EmailAddress", _
                 "Utilities.RegularExpressions", _
                 True)
      ' Add info object to list of objects
      compilationList.Add(expr)
                                             
      ' Generate assembly with compiled regular expressions
      Dim compilationArray(compilationList.Count - 1) As RegexCompilationInfo
      Dim assemName As New AssemblyName("RegexLib, Version=1.0.0.1001, Culture=neutral, PublicKeyToken=null")
      compilationList.CopyTo(compilationArray) 
      Regex.CompileToAssembly(compilationArray, assemName)                                                 
   End Sub
End Module

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

using System;
using Utilities.RegularExpressions;

public class CompiledRegexUsage
{
   public static void Main()
   {
      string text = "The the quick brown fox  fox jumps over the lazy dog dog.";
      DuplicatedString duplicateRegex = new DuplicatedString(); 
      if (duplicateRegex.Matches(text).Count > 0)
         Console.WriteLine("There are {0} duplicate words in \n   '{1}'", 
            duplicateRegex.Matches(text).Count, text);
      else
         Console.WriteLine("There are no duplicate words in \n   '{0}'", 
                           text);
   }
}
// The example displays the following output to the console:
//    There are 3 duplicate words in
//       'The the quick brown fox  fox jumps over the lazy dog dog.'
Imports Utilities.RegularExpressions

Module CompiledRegexUsage
   Public Sub Main()
      Dim text As String = "The the quick brown fox  fox jumps over the lazy dog dog."
      Dim duplicateRegex As New DuplicatedString()
      If duplicateRegex.Matches(text).Count > 0 Then
         Console.WriteLine("There are {0} duplicate words in {2}   '{1}'", _
            duplicateRegex.Matches(text).Count, text, vbCrLf)
      Else
         Console.WriteLine("There are no duplicate words in {1}   '{0}'", _
                           text, vbCrLf)
      End If
   End Sub
End Module
' The example displays the following output to the console:
'    There are 3 duplicate words in
'       'The the quick brown fox  fox jumps over the lazy dog dog.'

Для успешной компиляции этого второго примера требуется ссылка на RegexLib.dll (сборка, созданная в первом примере) для добавления в проект.

Комментарии

Метод CompileToAssembly(RegexCompilationInfo[], AssemblyName) создает платформа .NET Framework сборку, в которой каждое регулярное выражение, определенное в массивеregexinfos, представлено классом. Как правило, CompileToAssembly(RegexCompilationInfo[], AssemblyName) метод вызывается из отдельного приложения, которое создает сборку скомпилированных регулярных выражений. Каждое регулярное выражение, включенное в сборку, имеет следующие характеристики:

  • Он является производным Regex от класса.

  • Ему присваивается полное имя, определенное fullnamespace и name параметрами соответствующего RegexCompilationInfo объекта.

  • Он имеет конструктор по умолчанию (или без параметров).

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

Примечания для тех, кто вызывает этот метод

Если вы разрабатываете в системе с установленным платформа .NET Framework 4.5 или его конечными выпусками, вы используете платформа .NET Framework 4 и используете CompileToAssembly(RegexCompilationInfo[], AssemblyName) метод для создания сборки, содержащей скомпилированные регулярные выражения. При попытке использовать одно из регулярных выражений в этой сборке в системе с платформа .NET Framework 4 возникает исключение. Чтобы обойти эту проблему, можно воспользоваться одним из следующих способов: — создайте сборку, содержащую скомпилированные регулярные выражения в системе с платформа .NET Framework 4 вместо более поздних версий.

— Вместо вызова CompileToAssembly(RegexCompilationInfo[], AssemblyName) и извлечения скомпилированного регулярного выражения из сборки используйте статические или экземплярные Regex методы с Compiled параметром при создании экземпляра Regex объекта или вызове метода сопоставления шаблонов регулярного выражения.

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

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

CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[])

Внимание!

Regex.CompileToAssembly is obsolete and not supported. Use the RegexGeneratorAttribute with the regular expression source generator instead.

Компилирует один или несколько указанных объектов Regex в именованную сборку с заданными атрибутами.

public:
 static void CompileToAssembly(cli::array <System::Text::RegularExpressions::RegexCompilationInfo ^> ^ regexinfos, System::Reflection::AssemblyName ^ assemblyname, cli::array <System::Reflection::Emit::CustomAttributeBuilder ^> ^ attributes);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[]? attributes);
[System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the RegexGeneratorAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[]? attributes);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[] attributes);
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName * System.Reflection.Emit.CustomAttributeBuilder[] -> unit
[<System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the RegexGeneratorAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName * System.Reflection.Emit.CustomAttributeBuilder[] -> unit
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName, attributes As CustomAttributeBuilder())

Параметры

regexinfos
RegexCompilationInfo[]

Массив, описывающий регулярные выражения для компилирования.

assemblyname
AssemblyName

Имя файла сборки.

attributes
CustomAttributeBuilder[]

Массив, определяющий атрибуты, применяемые к сборке.

Атрибуты

Исключения

Значением свойства Name параметра assemblyname является пустая или нулевая строка.

-или- Шаблон регулярного выражения одного или более объектов в regexinfos содержит недопустимый синтаксис.

Параметр assemblyname или regexinfos имеет значение null.

только .NET Core и .NET 5+. Создание сборки скомпилированных регулярных выражений не поддерживается.

Примеры

В следующем примере создается сборка с именем RegexLib.dll и применяется AssemblyTitleAttribute к нему атрибут. Сборка включает два скомпилированных регулярных выражения. Во-первых, Utilities.RegularExpressions.DuplicatedStringсоответствует двум идентичным смежным словам. Во-вторых, Utilities.RegularExpressions.EmailAddressпроверяет, имеет ли строка правильный формат адреса электронной почты.

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using System.Text.RegularExpressions;

public class RegexCompilationTest
{
   public static void Main()
   {
      RegexCompilationInfo expr;
      List<RegexCompilationInfo> compilationList = new List<RegexCompilationInfo>();

      // Define regular expression to detect duplicate words
      expr = new RegexCompilationInfo(@"\b(?<word>\w+)\s+(\k<word>)\b", 
                 RegexOptions.IgnoreCase | RegexOptions.CultureInvariant, 
                 "DuplicatedString", 
                 "Utilities.RegularExpressions", 
                 true);
      // Add info object to list of objects
      compilationList.Add(expr);

      // Define regular expression to validate format of email address
      expr = new RegexCompilationInfo(@"^(?("")(""[^""]+?""@)|(([0-9A-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9A-Z])@))" + 
                 @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9A-Z][-\w]*[0-9A-Z]\.)+[zA-Z]{2,6}))$", 
                 RegexOptions.IgnoreCase | RegexOptions.CultureInvariant, 
                 "EmailAddress", 
                 "Utilities.RegularExpressions", 
                 true);
      // Add info object to list of objects
      compilationList.Add(expr);
                                             
      // Apply AssemblyTitle attribute to the new assembly
      //
      // Define the parameter(s) of the AssemblyTitle attribute's constructor 
      Type[] parameters = { typeof(string) };
      // Define the assembly's title
      object[] paramValues = { "General-purpose library of compiled regular expressions" };
      // Get the ConstructorInfo object representing the attribute's constructor
      ConstructorInfo ctor = typeof(System.Reflection.AssemblyTitleAttribute).GetConstructor(parameters);
      // Create the CustomAttributeBuilder object array
      CustomAttributeBuilder[] attBuilder = { new CustomAttributeBuilder(ctor, paramValues) }; 
                                                         
      // Generate assembly with compiled regular expressions
      RegexCompilationInfo[] compilationArray = new RegexCompilationInfo[compilationList.Count];
      AssemblyName assemName = new AssemblyName("RegexLib, Version=1.0.0.1001, Culture=neutral, PublicKeyToken=null");
      compilationList.CopyTo(compilationArray); 
      Regex.CompileToAssembly(compilationArray, assemName, attBuilder);                                                 
   }
}
Imports System.Collections.Generic
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Text.RegularExpressions

Module RegexCompilationTest
   Public Sub Main()
      Dim expr As RegexCompilationInfo
      Dim compilationList As New List(Of RegexCompilationInfo)
          
      ' Define regular expression to detect duplicate words
      expr = New RegexCompilationInfo("\b(?<word>\w+)\s+(\k<word>)\b", _
                 RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant, _
                 "DuplicatedString", _
                 "Utilities.RegularExpressions", _
                 True)
      ' Add info object to list of objects
      compilationList.Add(expr)

      ' Define regular expression to validate format of email address
      expr = New RegexCompilationInfo("^(?("")(""[^""]+?""@)|(([0-9A-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9A-Z])@))" + _ 
                 "(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9A-Z][-\w]*[0-9A-Z]\.)+[A-Z]{2,6}))$", _
                 RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant, _
                 "EmailAddress", _
                 "Utilities.RegularExpressions", _
                 True)
      ' Add info object to list of objects
      compilationList.Add(expr)

      ' Apply AssemblyTitle attribute to the new assembly
      '
      ' Define the parameter(s) of the AssemblyTitle attribute's constructor 
      Dim params() As Type = { GetType(String) }
      ' Define the assembly's title
      Dim paramValues() As Object = { "General-purpose library of compiled regular expressions" }
      ' Get the ConstructorInfo object representing the attribute's constructor
      Dim ctor As ConstructorInfo = GetType(System.Reflection.AssemblyTitleAttribute).GetConstructor(params)
      ' Create the CustomAttributeBuilder object array
      Dim attBuilder() As CustomAttributeBuilder = { New CustomAttributeBuilder(ctor, paramValues) } 
                                                         
      ' Generate assembly with compiled regular expressions
      Dim compilationArray(compilationList.Count - 1) As RegexCompilationInfo
      Dim assemName As New AssemblyName("RegexLib, Version=1.0.0.1001, Culture=neutral, PublicKeyToken=null")
      compilationList.CopyTo(compilationArray) 
      Regex.CompileToAssembly(compilationArray, assemName, attBuilder) 
   End Sub
End Module

Вы можете проверить, AssemblyTitleAttribute применен ли атрибут к сборке, проверив его манифест с помощью служебной программы отражения, такой как ILDasm.

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

using System;
using Utilities.RegularExpressions;

public class CompiledRegexUsage
{
   public static void Main()
   {
      string text = "The the quick brown fox  fox jumps over the lazy dog dog.";
      DuplicatedString duplicateRegex = new DuplicatedString(); 
      if (duplicateRegex.Matches(text).Count > 0)
         Console.WriteLine("There are {0} duplicate words in \n   '{1}'", 
            duplicateRegex.Matches(text).Count, text);
      else
         Console.WriteLine("There are no duplicate words in \n   '{0}'", 
                           text);
   }
}
// The example displays the following output to the console:
//    There are 3 duplicate words in
//       'The the quick brown fox  fox jumps over the lazy dog dog.'
Imports Utilities.RegularExpressions

Module CompiledRegexUsage
   Public Sub Main()
      Dim text As String = "The the quick brown fox  fox jumps over the lazy dog dog."
      Dim duplicateRegex As New DuplicatedString()
      If duplicateRegex.Matches(text).Count > 0 Then
         Console.WriteLine("There are {0} duplicate words in {2}   '{1}'", _
            duplicateRegex.Matches(text).Count, text, vbCrLf)
      Else
         Console.WriteLine("There are no duplicate words in {1}   '{0}'", _
                           text, vbCrLf)
      End If
   End Sub
End Module
' The example displays the following output to the console:
'    There are 3 duplicate words in
'       'The the quick brown fox  fox jumps over the lazy dog dog.'

Для успешной компиляции этого второго примера требуется ссылка на RegexLib.dll (сборка, созданная в первом примере) для добавления в проект.

Комментарии

Метод CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) создает платформа .NET Framework сборку, в которой каждое регулярное выражение, определенное в массивеregexinfos, представлено классом. Как правило, CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) метод вызывается из отдельного приложения, которое создает сборку скомпилированных регулярных выражений. Каждое регулярное выражение, включенное в сборку, имеет следующие характеристики:

  • Он является производным Regex от класса.

  • Ему присваивается полное имя, определенное fullnamespace и name параметрами соответствующего RegexCompilationInfo объекта.

  • Он имеет конструктор по умолчанию (или без параметров).

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

CompileToAssembly Поскольку метод создает сборку платформа .NET Framework из вызова метода вместо использования ключевого слова определения класса определенного языка (напримерclass, в C# или Class...End Class в Visual Basic), он не допускает платформа .NET Framework атрибуты, назначенные сборке с помощью стандартного синтаксиса атрибута языка разработки. Параметр attributes предоставляет альтернативный метод для определения атрибутов, применяемых к сборке. Для каждого атрибута, который вы хотите применить к сборке, выполните следующие действия.

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

  2. Type Получение объекта, представляющего класс атрибута, который требуется применить к новой сборке.

  3. GetConstructor Вызовите метод объекта атрибутаType, чтобы получить ConstructorInfo объект, представляющий конструктор атрибута, который требуется вызвать. GetConstructor Передайте метод массив Type объектов, представляющих типы параметров конструктора.

  4. Создайте массив, определяющий Object параметры, передаваемые конструктору атрибута.

  5. Создайте CustomAttributeBuilder экземпляр объекта, передав его конструктор ConstructorInfo , полученный на шаге 3, и массив, Object созданный на шаге 4.

Затем можно передать массив этих CustomAttributeBuilder объектов вместо attributes параметра в Regex.CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) метод.

Примечания для тех, кто вызывает этот метод

Если вы разрабатываете в системе с установленным платформа .NET Framework 4.5 или его конечными выпусками, вы используете платформа .NET Framework 4 и используете CompileToAssembly(RegexCompilationInfo[], AssemblyName) метод для создания сборки, содержащей скомпилированные регулярные выражения. При попытке использовать одно из регулярных выражений в этой сборке в системе с платформа .NET Framework 4 возникает исключение. Чтобы обойти эту проблему, можно воспользоваться одним из следующих способов: — создайте сборку, содержащую скомпилированные регулярные выражения в системе с платформа .NET Framework 4 вместо более поздних версий.

— Вместо вызова CompileToAssembly(RegexCompilationInfo[], AssemblyName) и извлечения скомпилированного регулярного выражения из сборки используйте статические или экземплярные Regex методы с Compiled параметром при создании экземпляра Regex объекта или вызове метода сопоставления шаблонов регулярного выражения.

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

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

CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String)

Внимание!

Regex.CompileToAssembly is obsolete and not supported. Use the RegexGeneratorAttribute with the regular expression source generator instead.

Компилирует один или несколько указанных объектов Regex и указанный файл ресурсов в именованную сборку с заданными атрибутами.

public:
 static void CompileToAssembly(cli::array <System::Text::RegularExpressions::RegexCompilationInfo ^> ^ regexinfos, System::Reflection::AssemblyName ^ assemblyname, cli::array <System::Reflection::Emit::CustomAttributeBuilder ^> ^ attributes, System::String ^ resourceFile);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[]? attributes, string? resourceFile);
[System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the RegexGeneratorAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[]? attributes, string? resourceFile);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[] attributes, string resourceFile);
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName * System.Reflection.Emit.CustomAttributeBuilder[] * string -> unit
[<System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the RegexGeneratorAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName * System.Reflection.Emit.CustomAttributeBuilder[] * string -> unit
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName, attributes As CustomAttributeBuilder(), resourceFile As String)

Параметры

regexinfos
RegexCompilationInfo[]

Массив, описывающий регулярные выражения для компилирования.

assemblyname
AssemblyName

Имя файла сборки.

attributes
CustomAttributeBuilder[]

Массив, определяющий атрибуты, применяемые к сборке.

resourceFile
String

Имя файла ресурса Win32 для включения в сборку.

Атрибуты

Исключения

Значением свойства Name параметра assemblyname является пустая или нулевая строка.

-или- Шаблон регулярного выражения одного или более объектов в regexinfos содержит недопустимый синтаксис.

Параметр assemblyname или regexinfos имеет значение null.

Параметр resourceFile назначает недопустимый файл ресурсов Win32.

Не удается найти файл, заданный свойством resourceFile.

только .NET Core и .NET 5+. Создание сборки скомпилированных регулярных выражений не поддерживается.

Комментарии

Метод CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) создает платформа .NET Framework сборку, в которой каждое регулярное выражение, определенное в массивеregexinfos, представлено классом. Как правило, CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) метод вызывается из отдельного приложения, которое создает сборку скомпилированных регулярных выражений. Каждое регулярное выражение, включенное в сборку, имеет следующие характеристики:

  • Он является производным Regex от класса.

  • Ему присваивается полное имя, определенное fullnamespace и name параметрами соответствующего RegexCompilationInfo объекта.

  • Он имеет конструктор по умолчанию (или без параметров).

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

CompileToAssembly Поскольку метод создает сборку платформа .NET Framework из вызова метода вместо использования ключевого слова определения класса определенного языка (напримерclass, в C# или Class...End Class в Visual Basic), он не допускает платформа .NET Framework атрибуты, назначенные сборке с помощью стандартного синтаксиса атрибута языка разработки. Параметр attributes предоставляет альтернативный метод для определения атрибутов, применяемых к сборке. Для каждого атрибута, который вы хотите применить к сборке, выполните следующие действия.

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

  2. Type Получение объекта, представляющего класс атрибута, который требуется применить к новой сборке.

  3. GetConstructor Вызовите метод объекта атрибутаType, чтобы получить ConstructorInfo объект, представляющий конструктор атрибута, который требуется вызвать. GetConstructor Передайте метод массив Type объектов, представляющих типы параметров конструктора.

  4. Создайте массив, определяющий Object параметры, передаваемые конструктору атрибута.

  5. Создайте CustomAttributeBuilder экземпляр объекта, передав его конструктор ConstructorInfo , полученный на шаге 3, и массив, Object созданный на шаге 4.

Затем можно передать массив этих CustomAttributeBuilder объектов вместо attributes параметра в CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) метод.

Примечания для тех, кто вызывает этот метод

Если вы разрабатываете в системе с установленным платформа .NET Framework 4.5 или его конечными выпусками, вы используете платформа .NET Framework 4 и используете CompileToAssembly(RegexCompilationInfo[], AssemblyName) метод для создания сборки, содержащей скомпилированные регулярные выражения. При попытке использовать одно из регулярных выражений в этой сборке в системе с платформа .NET Framework 4 возникает исключение. Чтобы обойти эту проблему, можно воспользоваться одним из следующих способов: — создайте сборку, содержащую скомпилированные регулярные выражения в системе с платформа .NET Framework 4 вместо более поздних версий.

— Вместо вызова CompileToAssembly(RegexCompilationInfo[], AssemblyName) и извлечения скомпилированного регулярного выражения из сборки используйте статические или экземплярные Regex методы с Compiled параметром при создании экземпляра Regex объекта или вызове метода сопоставления шаблонов регулярного выражения.

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

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