Bagikan melalui


Regex.CompileToAssembly Metode

Definisi

Mengkompilasi ekspresi reguler dan menyimpannya ke disk dalam satu rakitan.

Overload

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

Mengkompilasi satu atau beberapa objek Regex yang ditentukan dan file sumber daya tertentu ke rakitan bernama dengan atribut yang ditentukan.

CompileToAssembly(RegexCompilationInfo[], AssemblyName)
Kedaluwarsa.

Mengkompilasi satu atau beberapa objek Regex yang ditentukan ke rakitan bernama.

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

Mengkompilasi satu atau beberapa objek Regex yang ditentukan ke rakitan bernama dengan atribut yang ditentukan.

Keterangan

Nota

Pada .NET Core dan .NET 5+, panggilan ke metode Regex.CompileToAssembly melemparkan PlatformNotSupportedException. Menulis rakitan tidak didukung.

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

Sumber:
Regex.cs
Sumber:
Regex.cs
Sumber:
Regex.cs

Perhatian

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

Mengkompilasi satu atau beberapa objek Regex yang ditentukan dan file sumber daya tertentu ke rakitan bernama dengan atribut yang ditentukan.

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 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);
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 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
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName, attributes As CustomAttributeBuilder(), resourceFile As String)

Parameter

regexinfos
RegexCompilationInfo[]

Array yang menjelaskan ekspresi reguler untuk dikompilasi.

assemblyname
AssemblyName

Nama file assembly.

attributes
CustomAttributeBuilder[]

Array yang menentukan atribut yang akan diterapkan ke assembly.

resourceFile
String

Nama file sumber daya Win32 untuk disertakan dalam rakitan.

Atribut

Pengecualian

Nilai properti Name parameter assemblyname adalah string kosong atau null.

-atau-

Pola ekspresi reguler dari satu atau beberapa objek dalam regexinfos berisi sintaks yang tidak valid.

assemblyname atau regexinfosnull.

Parameter resourceFile menunjuk file sumber daya Win32 yang tidak valid.

File yang ditunjuk oleh parameter resourceFile tidak dapat ditemukan.

.NET Core dan .NET 5+ saja: Membuat rakitan ekspresi reguler yang dikompilasi tidak didukung.

Keterangan

Metode CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) menghasilkan rakitan .NET Framework di mana setiap ekspresi reguler yang ditentukan dalam array regexinfos diwakili oleh kelas. Biasanya, metode CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) dipanggil dari aplikasi terpisah yang menghasilkan perakitan ekspresi reguler yang dikompilasi. Setiap ekspresi reguler yang disertakan dalam rakitan memiliki karakteristik berikut:

  • Ini berasal dari kelas Regex.

  • Ini diberi nama yang sepenuhnya memenuhi syarat yang ditentukan oleh parameter fullnamespace dan name dari objek RegexCompilationInfo yang sesuai.

  • Ini memiliki konstruktor default (atau tanpa parameter).

Biasanya, kode yang membuat instans dan menggunakan ekspresi reguler yang dikompilasi ditemukan dalam rakitan atau aplikasi yang terpisah dari kode yang membuat rakitan.

Karena metode CompileToAssembly menghasilkan rakitan .NET Framework dari panggilan metode alih-alih menggunakan kata kunci definisi kelas bahasa tertentu (seperti class di C# atau Class...End Class di Visual Basic), itu tidak memungkinkan atribut .NET Framework ditetapkan ke assembly dengan menggunakan sintaks atribut standar bahasa pengembangan. Parameter attributes menyediakan metode alternatif untuk menentukan atribut yang berlaku untuk rakitan. Untuk setiap atribut yang ingin Anda terapkan ke assembly, lakukan hal berikut:

  1. Buat array objek Type yang mewakili jenis parameter konstruktor atribut yang ingin Anda panggil.

  2. Ambil objek Type yang mewakili kelas atribut yang ingin Anda terapkan ke rakitan baru.

  3. Panggil metode GetConstructor atribut Type objek untuk mengambil objek ConstructorInfo yang mewakili konstruktor atribut yang ingin Anda panggil. Berikan metode GetConstructor array objek Type yang mewakili jenis parameter konstruktor

  4. Buat array Object yang menentukan parameter untuk diteruskan ke konstruktor atribut.

  5. Buat instans objek CustomAttributeBuilder dengan meneruskan konstruktor objek ConstructorInfo yang diambil di langkah 3 dan array Object yang dibuat di langkah 4.

Anda kemudian dapat meneruskan array objek CustomAttributeBuilder ini alih-alih parameter attributes ke metode CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String).

Catatan Bagi Pemanggil

Jika Anda mengembangkan pada sistem yang menginstal .NET Framework 4.5 atau rilis titiknya, Anda menargetkan .NET Framework 4, dan Anda menggunakan metode CompileToAssembly(RegexCompilationInfo[], AssemblyName) untuk membuat rakitan yang berisi ekspresi reguler yang dikompilasi. Mencoba menggunakan salah satu ekspresi reguler dalam rakitan tersebut pada sistem yang memiliki .NET Framework 4 memberikan pengecualian. Untuk mengatasi masalah ini, Anda dapat melakukan salah satu hal berikut:

  • Buat rakitan yang berisi ekspresi reguler yang dikompilasi pada sistem yang memiliki .NET Framework 4 alih-alih versi yang lebih baru diinstal.

  • Alih-alih memanggil CompileToAssembly(RegexCompilationInfo[], AssemblyName) dan mengambil ekspresi reguler yang dikompilasi dari rakitan, gunakan metode Regex statis atau instans dengan opsi Compiled saat Anda membuat instans objek Regex atau memanggil metode pencocokan pola ekspresi reguler.

Lihat juga

Berlaku untuk

CompileToAssembly(RegexCompilationInfo[], AssemblyName)

Sumber:
Regex.cs
Sumber:
Regex.cs
Sumber:
Regex.cs

Perhatian

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

Mengkompilasi satu atau beberapa objek Regex yang ditentukan ke rakitan bernama.

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 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);
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName -> unit
[<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
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName)

Parameter

regexinfos
RegexCompilationInfo[]

Array yang menjelaskan ekspresi reguler untuk dikompilasi.

assemblyname
AssemblyName

Nama file assembly.

Atribut

Pengecualian

Nilai properti Name parameter assemblyname adalah string kosong atau null.

-atau-

Pola ekspresi reguler dari satu atau beberapa objek dalam regexinfos berisi sintaks yang tidak valid.

assemblyname atau regexinfosnull.

.NET Core dan .NET 5+ saja: Membuat rakitan ekspresi reguler yang dikompilasi tidak didukung.

Contoh

Contoh berikut membuat rakitan bernama RegexLib.dll. Rakitan mencakup dua ekspresi reguler yang dikompilasi. Yang pertama, Utilities.RegularExpressions.DuplicatedString, cocok dengan dua kata yang berdamai yang identik. Yang kedua, Utilities.RegularExpressions.EmailAddress, memeriksa apakah string memiliki format yang benar untuk menjadi alamat email.

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

Ekspresi reguler yang memeriksa string untuk kata duplikat kemudian dibuat dan digunakan oleh contoh berikut.

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

Kompilasi yang berhasil dari contoh kedua ini memerlukan referensi ke RegexLib.dll (rakitan yang dibuat oleh contoh pertama) untuk ditambahkan ke proyek.

Keterangan

Metode CompileToAssembly(RegexCompilationInfo[], AssemblyName) menghasilkan rakitan .NET Framework di mana setiap ekspresi reguler yang ditentukan dalam array regexinfos diwakili oleh kelas. Biasanya, metode CompileToAssembly(RegexCompilationInfo[], AssemblyName) dipanggil dari aplikasi terpisah yang menghasilkan perakitan ekspresi reguler yang dikompilasi. Setiap ekspresi reguler yang disertakan dalam rakitan memiliki karakteristik berikut:

  • Ini berasal dari kelas Regex.

  • Ini diberi nama yang sepenuhnya memenuhi syarat yang ditentukan oleh parameter fullnamespace dan name dari objek RegexCompilationInfo yang sesuai.

  • Ini memiliki konstruktor default (atau tanpa parameter).

Biasanya, kode yang membuat instans dan menggunakan ekspresi reguler yang dikompilasi ditemukan dalam rakitan atau aplikasi yang terpisah dari kode yang membuat rakitan.

Catatan Bagi Pemanggil

Jika Anda mengembangkan pada sistem yang menginstal .NET Framework 4.5 atau rilis titiknya, Anda menargetkan .NET Framework 4, dan Anda menggunakan metode CompileToAssembly(RegexCompilationInfo[], AssemblyName) untuk membuat rakitan yang berisi ekspresi reguler yang dikompilasi. Mencoba menggunakan salah satu ekspresi reguler dalam rakitan tersebut pada sistem yang memiliki .NET Framework 4 memberikan pengecualian. Untuk mengatasi masalah ini, Anda dapat melakukan salah satu hal berikut:

  • Buat rakitan yang berisi ekspresi reguler yang dikompilasi pada sistem yang memiliki .NET Framework 4 alih-alih versi yang lebih baru diinstal.

  • Alih-alih memanggil CompileToAssembly(RegexCompilationInfo[], AssemblyName) dan mengambil ekspresi reguler yang dikompilasi dari rakitan, gunakan metode Regex statis atau instans dengan opsi Compiled saat Anda membuat instans objek Regex atau memanggil metode pencocokan pola ekspresi reguler.

Lihat juga

Berlaku untuk

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

Sumber:
Regex.cs
Sumber:
Regex.cs
Sumber:
Regex.cs

Perhatian

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

Mengkompilasi satu atau beberapa objek Regex yang ditentukan ke rakitan bernama dengan atribut yang ditentukan.

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 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);
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 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
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName, attributes As CustomAttributeBuilder())

Parameter

regexinfos
RegexCompilationInfo[]

Array yang menjelaskan ekspresi reguler untuk dikompilasi.

assemblyname
AssemblyName

Nama file assembly.

attributes
CustomAttributeBuilder[]

Array yang menentukan atribut yang akan diterapkan ke assembly.

Atribut

Pengecualian

Nilai properti Name parameter assemblyname adalah string kosong atau null.

-atau-

Pola ekspresi reguler dari satu atau beberapa objek dalam regexinfos berisi sintaks yang tidak valid.

assemblyname atau regexinfosnull.

.NET Core dan .NET 5+ saja: Membuat rakitan ekspresi reguler yang dikompilasi tidak didukung.

Contoh

Contoh berikut membuat rakitan bernama RegexLib.dll dan menerapkan atribut AssemblyTitleAttribute ke dalamnya. Rakitan mencakup dua ekspresi reguler yang dikompilasi. Yang pertama, Utilities.RegularExpressions.DuplicatedString, cocok dengan dua kata yang berdamai yang identik. Yang kedua, Utilities.RegularExpressions.EmailAddress, memeriksa apakah string memiliki format yang benar untuk menjadi alamat email.

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

Anda dapat memverifikasi bahwa atribut AssemblyTitleAttribute telah diterapkan ke rakitan dengan memeriksa manifesnya dengan utilitas pantulan seperti ILDasm.

Ekspresi reguler yang memeriksa string untuk kata duplikat kemudian dibuat dan digunakan oleh contoh berikut.

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

Kompilasi yang berhasil dari contoh kedua ini memerlukan referensi ke RegexLib.dll (rakitan yang dibuat oleh contoh pertama) untuk ditambahkan ke proyek.

Keterangan

Metode CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) menghasilkan rakitan .NET Framework di mana setiap ekspresi reguler yang ditentukan dalam array regexinfos diwakili oleh kelas. Biasanya, metode CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) dipanggil dari aplikasi terpisah yang menghasilkan perakitan ekspresi reguler yang dikompilasi. Setiap ekspresi reguler yang disertakan dalam rakitan memiliki karakteristik berikut:

  • Ini berasal dari kelas Regex.

  • Ini diberi nama yang sepenuhnya memenuhi syarat yang ditentukan oleh parameter fullnamespace dan name dari objek RegexCompilationInfo yang sesuai.

  • Ini memiliki konstruktor default (atau tanpa parameter).

Biasanya, kode yang membuat instans dan menggunakan ekspresi reguler yang dikompilasi ditemukan dalam rakitan atau aplikasi yang terpisah dari kode yang membuat rakitan.

Karena metode CompileToAssembly menghasilkan rakitan .NET Framework dari panggilan metode alih-alih menggunakan kata kunci definisi kelas bahasa tertentu (seperti class di C# atau Class...End Class di Visual Basic), itu tidak memungkinkan atribut .NET Framework ditetapkan ke assembly dengan menggunakan sintaks atribut standar bahasa pengembangan. Parameter attributes menyediakan metode alternatif untuk menentukan atribut yang berlaku untuk rakitan. Untuk setiap atribut yang ingin Anda terapkan ke assembly, lakukan hal berikut:

  1. Buat array objek Type yang mewakili jenis parameter konstruktor atribut yang ingin Anda panggil.

  2. Ambil objek Type yang mewakili kelas atribut yang ingin Anda terapkan ke rakitan baru.

  3. Panggil metode GetConstructor atribut Type objek untuk mengambil objek ConstructorInfo yang mewakili konstruktor atribut yang ingin Anda panggil. Berikan metode GetConstructor array objek Type yang mewakili jenis parameter konstruktor.

  4. Buat array Object yang menentukan parameter untuk diteruskan ke konstruktor atribut.

  5. Buat instans objek CustomAttributeBuilder dengan meneruskan konstruktor objek ConstructorInfo yang diambil di langkah 3 dan array Object yang dibuat di langkah 4.

Anda kemudian dapat meneruskan array objek CustomAttributeBuilder ini alih-alih parameter attributes ke metode Regex.CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]).

Catatan Bagi Pemanggil

Jika Anda mengembangkan pada sistem yang menginstal .NET Framework 4.5 atau rilis titiknya, Anda menargetkan .NET Framework 4, dan Anda menggunakan metode CompileToAssembly(RegexCompilationInfo[], AssemblyName) untuk membuat rakitan yang berisi ekspresi reguler yang dikompilasi. Mencoba menggunakan salah satu ekspresi reguler dalam rakitan tersebut pada sistem yang memiliki .NET Framework 4 memberikan pengecualian. Untuk mengatasi masalah ini, Anda dapat melakukan salah satu hal berikut:

  • Buat rakitan yang berisi ekspresi reguler yang dikompilasi pada sistem yang memiliki .NET Framework 4 alih-alih versi yang lebih baru diinstal.

  • Alih-alih memanggil CompileToAssembly(RegexCompilationInfo[], AssemblyName) dan mengambil ekspresi reguler yang dikompilasi dari rakitan, gunakan metode Regex statis atau instans dengan opsi Compiled saat Anda membuat instans objek Regex atau memanggil metode pencocokan pola ekspresi reguler.

Lihat juga

Berlaku untuk