Regex.CompileToAssembly Methode

Definition

Kompiliert reguläre Ausdrücke und speichert sie auf einem Datenträger in einer einzigen Assembly.

Überlädt

Name Beschreibung
CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String)
Veraltet.

Kompiliert ein oder mehrere angegebene Regex Objekte und eine angegebene Ressourcendatei zu einer benannten Assembly mit den angegebenen Attributen.

CompileToAssembly(RegexCompilationInfo[], AssemblyName)
Veraltet.

Kompiliert ein oder mehrere angegebene Regex Objekte zu einer benannten Assembly.

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

Kompiliert ein oder mehrere angegebene Regex Objekte in einer benannten Assembly mit den angegebenen Attributen.

Hinweise

Note

Bei .NET Core und .NET 5+ lösen Aufrufe der methode Regex.CompileToAssembly einen PlatformNotSupportedException aus. Das Schreiben einer Assembly wird nicht unterstützt.

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

Quelle:
Regex.cs
Quelle:
Regex.cs
Quelle:
Regex.cs
Quelle:
Regex.cs
Quelle:
Regex.cs

Achtung

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

Kompiliert ein oder mehrere angegebene Regex Objekte und eine angegebene Ressourcendatei zu einer benannten Assembly mit den angegebenen Attributen.

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);
[System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute 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);
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 GeneratedRegexAttribute 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
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)

Parameter

regexinfos
RegexCompilationInfo[]

Ein Array, das die zu kompilierten regulären Ausdrücke beschreibt.

assemblyname
AssemblyName

Der Dateiname der Assembly.

attributes
CustomAttributeBuilder[]

Ein Array, das die Attribute definiert, die auf die Assembly angewendet werden sollen.

resourceFile
String

Der Name der Win32-Ressourcendatei, die in die Assembly aufgenommen werden soll.

Attribute

Ausnahmen

Der Wert der Eigenschaft des assemblyname Parameters Name ist eine leere oder NULL-Zeichenfolge.

-oder-

Das Muster des regulären Ausdrucks eines oder mehrerer Objekte enthält regexinfos eine ungültige Syntax.

assemblyname oder regexinfos ist null.

Der resourceFile Parameter gibt eine ungültige Win32-Ressourcendatei an.

Die vom resourceFile Parameter festgelegte Datei wurde nicht gefunden.

Das Erstellen einer Assembly kompilierter regulärer Ausdrücke wird nicht unterstützt.

Hinweise

Die CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String)-Methode generiert eine .NET Framework-Assembly, in der jeder reguläre Ausdruck, der im Array regexinfos definiert ist, durch eine Klasse dargestellt wird. In der Regel wird die CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) Methode von einer separaten Anwendung aufgerufen, die eine Assembly kompilierter regulärer Ausdrücke generiert. Jeder reguläre Ausdruck, der in der Assembly enthalten ist, weist die folgenden Merkmale auf:

  • Sie wird von der Regex Klasse abgeleitet.

  • Ihm wird der vollqualifizierte Name zugewiesen, der durch die fullnamespace Parameter name des entsprechenden RegexCompilationInfo Objekts definiert wird.

  • Er verfügt über einen Standardkonstruktor (oder parameterlose) Konstruktor.

Ordinarily, the code that instantiates and uses the compiled regular expression is found in an assembly or application that is separate from the code that creates the assembly.

Da die CompileToAssembly-Methode eine .NET Framework-Assembly aus einem Methodenaufruf generiert, anstatt das Klassendefinitionsschlüsselwort einer bestimmten Sprache zu verwenden (z. B. class in C# oder Class... End Class in Visual Basic) lässt es nicht zu, dass .NET Framework-Attribute der Assembly mithilfe der Standardmäßigen Attributsyntax der Entwicklungssprache zugewiesen werden. Der attributes Parameter stellt eine alternative Methode zum Definieren der Attribute bereit, die für die Assembly gelten. Führen Sie für jedes Attribut, das Sie auf die Assembly anwenden möchten, die folgenden Schritte aus:

  1. Erstellen Sie ein Array von Type Objekten, das die Parametertypen des Attributkonstruktors darstellt, den Sie aufrufen möchten.

  2. Rufen Sie ein Type Objekt ab, das die Attributklasse darstellt, die Sie auf die neue Assembly anwenden möchten.

  3. Rufen Sie die GetConstructor Methode des Attributobjekts Type auf, um ein ConstructorInfo Objekt abzurufen, das den Attributkonstruktor darstellt, den Sie aufrufen möchten. Übergeben Sie die Methode an das GetConstructor Array von Type Objekten, die die Parametertypen des Konstruktors darstellen.

  4. Erstellen Sie ein Object Array, das die Parameter definiert, die an den Konstruktor des Attributs übergeben werden sollen.

  5. Instanziieren Sie ein CustomAttributeBuilder Objekt, indem Sie den Konstruktor übergeben, das ConstructorInfo in Schritt 3 abgerufene Objekt und das Object in Schritt 4 erstellte Array.

Anschließend können Sie ein Array dieser CustomAttributeBuilder Objekte anstelle des attributes Parameters an die CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) Methode übergeben.

Hinweise für Aufrufer

Wenn Sie ein System entwickeln, das .NET Framework 4.5 oder seine Point Releases installiert hat, verwenden Sie .NET Framework 4, und Sie verwenden die CompileToAssembly(RegexCompilationInfo[], AssemblyName)-Methode, um eine Assembly zu erstellen, die kompilierte reguläre Ausdrücke enthält. Wenn Sie versuchen, einen der regulären Ausdrücke in dieser Assembly in einem System zu verwenden, das .NET Framework 4 enthält, wird eine Ausnahme ausgelöst. Um dieses Problem zu umgehen, haben Sie die folgenden Möglichkeiten:

  • Erstellen Sie die Assembly, die die kompilierten regulären Ausdrücke auf einem System enthält, das .NET Framework 4 anstelle neuerer Versionen installiert hat.

  • Anstatt den kompilierten regulären Ausdruck aus einer Assembly aufzurufen CompileToAssembly(RegexCompilationInfo[], AssemblyName) und abzurufen, verwenden Sie entweder statische Methoden oder Instanzmethoden Regex mit der Compiled Option, wenn Sie ein Regex Objekt instanziieren oder eine Abgleichsmethode für reguläre Ausdrücke aufrufen.

Weitere Informationen

Gilt für:

CompileToAssembly(RegexCompilationInfo[], AssemblyName)

Quelle:
Regex.cs
Quelle:
Regex.cs
Quelle:
Regex.cs
Quelle:
Regex.cs
Quelle:
Regex.cs

Achtung

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

Kompiliert ein oder mehrere angegebene Regex Objekte zu einer benannten Assembly.

public:
 static void CompileToAssembly(cli::array <System::Text::RegularExpressions::RegexCompilationInfo ^> ^ regexinfos, System::Reflection::AssemblyName ^ assemblyname);
[System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute 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);
public static void CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname);
[<System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute 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
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName -> unit
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName)

Parameter

regexinfos
RegexCompilationInfo[]

Ein Array, das die zu kompilierten regulären Ausdrücke beschreibt.

assemblyname
AssemblyName

Der Dateiname der Assembly.

Attribute

Ausnahmen

Der Wert der Eigenschaft des assemblyname Parameters Name ist eine leere oder NULL-Zeichenfolge.

-oder-

Das Muster des regulären Ausdrucks eines oder mehrerer Objekte enthält regexinfos eine ungültige Syntax.

assemblyname oder regexinfos ist null.

Das Erstellen einer Assembly kompilierter regulärer Ausdrücke wird nicht unterstützt.

Beispiele

Im folgenden Beispiel wird eine Assembly mit dem Namen RegexLib.dllerstellt. Die Assembly enthält zwei kompilierte reguläre Ausdrücke. Der erste, , Utilities.RegularExpressions.DuplicatedStringgleicht zwei identische zusammenhängende Wörter. Der zweite, , überprüft, Utilities.RegularExpressions.EmailAddressob eine Zeichenfolge das richtige Format hat, um eine E-Mail-Adresse zu sein.

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

Der reguläre Ausdruck, der eine Zeichenfolge auf doppelte Wörter überprüft, wird dann instanziiert und vom folgenden Beispiel verwendet.

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.'

Die erfolgreiche Kompilierung dieses zweiten Beispiels erfordert einen Verweis auf RegexLib.dll (die vom ersten Beispiel erstellte Assembly), die dem Projekt hinzugefügt werden soll.

Hinweise

Die CompileToAssembly(RegexCompilationInfo[], AssemblyName)-Methode generiert eine .NET Framework-Assembly, in der jeder reguläre Ausdruck, der im Array regexinfos definiert ist, durch eine Klasse dargestellt wird. In der Regel wird die CompileToAssembly(RegexCompilationInfo[], AssemblyName) Methode von einer separaten Anwendung aufgerufen, die eine Assembly kompilierter regulärer Ausdrücke generiert. Jeder reguläre Ausdruck, der in der Assembly enthalten ist, weist die folgenden Merkmale auf:

  • Sie wird von der Regex Klasse abgeleitet.

  • Ihm wird der vollqualifizierte Name zugewiesen, der durch die fullnamespace Parameter name des entsprechenden RegexCompilationInfo Objekts definiert wird.

  • Er verfügt über einen Standardkonstruktor (oder parameterlose) Konstruktor.

Ordinarily, the code that instantiates and uses the compiled regular expression is found in an assembly or application that is separate from the code that creates the assembly.

Hinweise für Aufrufer

Wenn Sie ein System entwickeln, das .NET Framework 4.5 oder seine Point Releases installiert hat, verwenden Sie .NET Framework 4, und Sie verwenden die CompileToAssembly(RegexCompilationInfo[], AssemblyName)-Methode, um eine Assembly zu erstellen, die kompilierte reguläre Ausdrücke enthält. Wenn Sie versuchen, einen der regulären Ausdrücke in dieser Assembly in einem System zu verwenden, das .NET Framework 4 enthält, wird eine Ausnahme ausgelöst. Um dieses Problem zu umgehen, haben Sie die folgenden Möglichkeiten:

  • Erstellen Sie die Assembly, die die kompilierten regulären Ausdrücke auf einem System enthält, das .NET Framework 4 anstelle neuerer Versionen installiert hat.

  • Anstatt den kompilierten regulären Ausdruck aus einer Assembly aufzurufen CompileToAssembly(RegexCompilationInfo[], AssemblyName) und abzurufen, verwenden Sie entweder statische Methoden oder Instanzmethoden Regex mit der Compiled Option, wenn Sie ein Regex Objekt instanziieren oder eine Abgleichsmethode für reguläre Ausdrücke aufrufen.

Weitere Informationen

Gilt für:

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

Quelle:
Regex.cs
Quelle:
Regex.cs
Quelle:
Regex.cs
Quelle:
Regex.cs
Quelle:
Regex.cs

Achtung

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

Kompiliert ein oder mehrere angegebene Regex Objekte in einer benannten Assembly mit den angegebenen Attributen.

public:
 static void CompileToAssembly(cli::array <System::Text::RegularExpressions::RegexCompilationInfo ^> ^ regexinfos, System::Reflection::AssemblyName ^ assemblyname, cli::array <System::Reflection::Emit::CustomAttributeBuilder ^> ^ attributes);
[System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute 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);
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 GeneratedRegexAttribute 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
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())

Parameter

regexinfos
RegexCompilationInfo[]

Ein Array, das die zu kompilierten regulären Ausdrücke beschreibt.

assemblyname
AssemblyName

Der Dateiname der Assembly.

attributes
CustomAttributeBuilder[]

Ein Array, das die Attribute definiert, die auf die Assembly angewendet werden sollen.

Attribute

Ausnahmen

Der Wert der Eigenschaft des assemblyname Parameters Name ist eine leere oder NULL-Zeichenfolge.

-oder-

Das Muster des regulären Ausdrucks eines oder mehrerer Objekte enthält regexinfos eine ungültige Syntax.

assemblyname oder regexinfos ist null.

Das Erstellen einer Assembly kompilierter regulärer Ausdrücke wird nicht unterstützt.

Beispiele

Im folgenden Beispiel wird eine Assembly mit dem Namen RegexLib.dll erstellt und das AssemblyTitleAttribute Attribut darauf angewendet. Die Assembly enthält zwei kompilierte reguläre Ausdrücke. Der erste, , Utilities.RegularExpressions.DuplicatedStringgleicht zwei identische zusammenhängende Wörter. Der zweite, , überprüft, Utilities.RegularExpressions.EmailAddressob eine Zeichenfolge das richtige Format hat, um eine E-Mail-Adresse zu sein.

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

Sie können überprüfen, ob das AssemblyTitleAttribute Attribut auf die Assembly angewendet wurde, indem Sie das Manifest mit einem Spiegelungshilfsprogramm wie ILDasm untersuchen.

Der reguläre Ausdruck, der eine Zeichenfolge auf doppelte Wörter überprüft, wird dann instanziiert und vom folgenden Beispiel verwendet.

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.'

Die erfolgreiche Kompilierung dieses zweiten Beispiels erfordert einen Verweis auf RegexLib.dll (die vom ersten Beispiel erstellte Assembly), die dem Projekt hinzugefügt werden soll.

Hinweise

Die CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[])-Methode generiert eine .NET Framework-Assembly, in der jeder reguläre Ausdruck, der im Array regexinfos definiert ist, durch eine Klasse dargestellt wird. In der Regel wird die CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) Methode von einer separaten Anwendung aufgerufen, die eine Assembly kompilierter regulärer Ausdrücke generiert. Jeder reguläre Ausdruck, der in der Assembly enthalten ist, weist die folgenden Merkmale auf:

  • Sie wird von der Regex Klasse abgeleitet.

  • Ihm wird der vollqualifizierte Name zugewiesen, der durch die fullnamespace Parameter name des entsprechenden RegexCompilationInfo Objekts definiert wird.

  • Er verfügt über einen Standardkonstruktor (oder parameterlose) Konstruktor.

Ordinarily, the code that instantiates and uses the compiled regular expression is found in an assembly or application that is separate from the code that creates the assembly.

Da die CompileToAssembly-Methode eine .NET Framework-Assembly aus einem Methodenaufruf generiert, anstatt das Klassendefinitionsschlüsselwort einer bestimmten Sprache zu verwenden (z. B. class in C# oder Class... End Class in Visual Basic) lässt es nicht zu, dass .NET Framework-Attribute der Assembly mithilfe der Standardmäßigen Attributsyntax der Entwicklungssprache zugewiesen werden. Der attributes Parameter stellt eine alternative Methode zum Definieren der Attribute bereit, die für die Assembly gelten. Führen Sie für jedes Attribut, das Sie auf die Assembly anwenden möchten, die folgenden Schritte aus:

  1. Erstellen Sie ein Array von Type Objekten, das die Parametertypen des Attributkonstruktors darstellt, den Sie aufrufen möchten.

  2. Rufen Sie ein Type Objekt ab, das die Attributklasse darstellt, die Sie auf die neue Assembly anwenden möchten.

  3. Rufen Sie die GetConstructor Methode des Attributobjekts Type auf, um ein ConstructorInfo Objekt abzurufen, das den Attributkonstruktor darstellt, den Sie aufrufen möchten. Übergeben Sie die Methode an das GetConstructor Array von Type Objekten, die die Parametertypen des Konstruktors darstellen.

  4. Erstellen Sie ein Object Array, das die Parameter definiert, die an den Konstruktor des Attributs übergeben werden sollen.

  5. Instanziieren Sie ein CustomAttributeBuilder Objekt, indem Sie den Konstruktor übergeben, das ConstructorInfo in Schritt 3 abgerufene Objekt und das Object in Schritt 4 erstellte Array.

Anschließend können Sie ein Array dieser CustomAttributeBuilder Objekte anstelle des attributes Parameters an die Regex.CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) Methode übergeben.

Hinweise für Aufrufer

Wenn Sie ein System entwickeln, das .NET Framework 4.5 oder seine Point Releases installiert hat, verwenden Sie .NET Framework 4, und Sie verwenden die CompileToAssembly(RegexCompilationInfo[], AssemblyName)-Methode, um eine Assembly zu erstellen, die kompilierte reguläre Ausdrücke enthält. Wenn Sie versuchen, einen der regulären Ausdrücke in dieser Assembly in einem System zu verwenden, das .NET Framework 4 enthält, wird eine Ausnahme ausgelöst. Um dieses Problem zu umgehen, haben Sie die folgenden Möglichkeiten:

  • Erstellen Sie die Assembly, die die kompilierten regulären Ausdrücke auf einem System enthält, das .NET Framework 4 anstelle neuerer Versionen installiert hat.

  • Anstatt den kompilierten regulären Ausdruck aus einer Assembly aufzurufen CompileToAssembly(RegexCompilationInfo[], AssemblyName) und abzurufen, verwenden Sie entweder statische Methoden oder Instanzmethoden Regex mit der Compiled Option, wenn Sie ein Regex Objekt instanziieren oder eine Abgleichsmethode für reguläre Ausdrücke aufrufen.

Weitere Informationen

Gilt für: