Aracılığıyla paylaş


Regex.CompileToAssembly Yöntem

Tanım

Normal ifadeleri derler ve tek bir derlemede diske kaydeder.

Aşırı Yüklemeler

CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String)
Geçersiz.

Belirtilen bir veya daha fazla Regex nesnesini ve belirtilen kaynak dosyasını belirtilen özniteliklere sahip adlandırılmış bir derlemeye derler.

CompileToAssembly(RegexCompilationInfo[], AssemblyName)
Geçersiz.

Belirtilen bir veya daha fazla Regex nesnesini adlandırılmış bir derlemeye derler.

CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[])
Geçersiz.

Belirtilen özniteliklere sahip adlandırılmış bir derlemeye bir veya daha fazla belirtilen Regex nesnesi derler.

Açıklamalar

Not

.NET Core ve .NET 5+ üzerinde, Regex.CompileToAssembly yöntemine yapılan çağrılar bir PlatformNotSupportedExceptionoluşturur. Derleme yazma desteklenmez.

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

Kaynak:
Regex.cs
Kaynak:
Regex.cs
Kaynak:
Regex.cs

Dikkat

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

Belirtilen bir veya daha fazla Regex nesnesini ve belirtilen kaynak dosyasını belirtilen özniteliklere sahip adlandırılmış bir derlemeye derler.

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)

Parametreler

regexinfos
RegexCompilationInfo[]

Derlenecek normal ifadeleri açıklayan bir dizi.

assemblyname
AssemblyName

Derlemenin dosya adı.

attributes
CustomAttributeBuilder[]

Derlemeye uygulanacak öznitelikleri tanımlayan bir dizi.

resourceFile
String

Derlemeye eklenecek Win32 kaynak dosyasının adı.

Öznitelikler

Özel durumlar

assemblyname parametresinin Name özelliğinin değeri boş veya null bir dizedir.

-veya-

regexinfos'daki bir veya daha fazla nesnenin normal ifade deseni geçersiz söz dizimi içeriyor.

assemblyname veya regexinfosnull.

resourceFile parametresi geçersiz bir Win32 kaynak dosyası belirtir.

resourceFile parametresi tarafından belirlenen dosya bulunamıyor.

Yalnızca .NET Core ve .NET 5+ : Derlenmiş normal ifadeler derlemesi oluşturma desteklenmez.

Açıklamalar

CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) yöntemi, regexinfos dizisinde tanımlanan her normal ifadenin bir sınıf tarafından temsilildiği bir .NET Framework derlemesi oluşturur. Genellikle CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) yöntemi, derlenmiş normal ifadelerin derlemesini oluşturan ayrı bir uygulamadan çağrılır. Derlemeye dahil edilen her normal ifade aşağıdaki özelliklere sahiptir:

  • Regex sınıfından türetilir.

  • Buna, karşılık gelen RegexCompilationInfo nesnesinin fullnamespace ve name parametreleri tarafından tanımlanan tam ad atanır.

  • Varsayılan (veya parametresiz) bir oluşturucuya sahiptir.

Normalde, derlenmiş normal ifadenin örneğini oluşturan ve kullanan kod, derlemeyi oluşturan koddan ayrı bir derlemede veya uygulamada bulunur.

CompileToAssembly yöntemi, belirli bir dilin sınıf tanımı anahtar sözcüğünü kullanmak yerine yöntem çağrısından bir .NET Framework derlemesi oluşturduğundan (C# dilinde class veya Visual Basic'te Class...End Class), geliştirme dilinin standart öznitelik söz dizimini kullanarak .NET Framework özniteliklerinin derlemeye atanmasına izin vermez. attributes parametresi, derlemeye uygulanan öznitelikleri tanımlamak için alternatif bir yöntem sağlar. Derlemeye uygulamak istediğiniz her öznitelik için aşağıdakileri yapın:

  1. Çağırmak istediğiniz öznitelik oluşturucusunun parametre türlerini temsil eden bir Type nesnesi dizisi oluşturun.

  2. Yeni derlemeye uygulamak istediğiniz öznitelik sınıfını temsil eden bir Type nesnesi alın.

  3. Çağırmak istediğiniz öznitelik oluşturucuyu temsil eden bir ConstructorInfo nesnesi almak için öznitelik Type nesnesinin GetConstructor yöntemini çağırın. GetConstructor yöntemini oluşturucunun parametre türlerini temsil eden Type nesnelerinin dizisini geçirin

  4. Özniteliğin oluşturucusna geçirecek parametreleri tanımlayan bir Object dizisi oluşturun.

  5. 3. adımda alınan ConstructorInfo nesnesini oluşturucusunu ve 4. adımda oluşturulan Object dizisini geçirerek bir CustomAttributeBuilder nesnesinin örneğini oluşturma.

Daha sonra attributes parametresi yerine bu CustomAttributeBuilder nesnelerin bir dizisini CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) yöntemine geçirebilirsiniz.

Arayanlara Notlar

.NET Framework 4.5 veya onun nokta sürümlerinin yüklü olduğu bir sistemde geliştiriyorsanız, .NET Framework 4'ü hedefler ve derlenmiş normal ifadeler içeren bir derleme oluşturmak için CompileToAssembly(RegexCompilationInfo[], AssemblyName) yöntemini kullanırsınız. .NET Framework 4'e sahip bir sistemde bu derlemedeki normal ifadelerden birini kullanmaya çalışmak bir özel durum oluşturur. Bu sorunu geçici olarak çözmek için aşağıdakilerden birini yapabilirsiniz:

  • Derlenmiş normal ifadeleri içeren derlemeyi, sonraki sürümler yerine .NET Framework 4 yüklü bir sistemde oluşturun.

  • CompileToAssembly(RegexCompilationInfo[], AssemblyName) çağırmak ve derlenmiş normal ifadeyi bir derlemeden almak yerine, bir Regex nesnesi örneği oluştururken veya normal ifade desen eşleştirme yöntemini çağırırken Compiled seçeneğiyle statik veya örnek Regex yöntemleri kullanın.

Ayrıca bkz.

  • derleme ve yeniden kullanma

Şunlara uygulanır

CompileToAssembly(RegexCompilationInfo[], AssemblyName)

Kaynak:
Regex.cs
Kaynak:
Regex.cs
Kaynak:
Regex.cs

Dikkat

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

Belirtilen bir veya daha fazla Regex nesnesini adlandırılmış bir derlemeye derler.

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)

Parametreler

regexinfos
RegexCompilationInfo[]

Derlenecek normal ifadeleri açıklayan bir dizi.

assemblyname
AssemblyName

Derlemenin dosya adı.

Öznitelikler

Özel durumlar

assemblyname parametresinin Name özelliğinin değeri boş veya null bir dizedir.

-veya-

regexinfos'daki bir veya daha fazla nesnenin normal ifade deseni geçersiz söz dizimi içeriyor.

assemblyname veya regexinfosnull.

Yalnızca .NET Core ve .NET 5+ : Derlenmiş normal ifadeler derlemesi oluşturma desteklenmez.

Örnekler

Aşağıdaki örnek, RegexLib.dlladlı bir derleme oluşturur. Derleme iki derlenmiş normal ifade içerir. İlk Utilities.RegularExpressions.DuplicatedString, birbirinin aynı olan iki bitişik sözcükle eşleşir. İkinci Utilities.RegularExpressions.EmailAddress, bir dizenin e-posta adresi olarak doğru biçime sahip olup olmadığını denetler.

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

Yinelenen sözcükler için bir dizeyi denetleen normal ifade örneği oluşturulur ve aşağıdaki örnek tarafından kullanılır.

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

Bu ikinci örneğin başarılı bir şekilde derlenmesi için projeye eklenecek RegexLib.dll (ilk örnek tarafından oluşturulan derleme) başvurusu gerekir.

Açıklamalar

CompileToAssembly(RegexCompilationInfo[], AssemblyName) yöntemi, regexinfos dizisinde tanımlanan her normal ifadenin bir sınıf tarafından temsilildiği bir .NET Framework derlemesi oluşturur. Genellikle CompileToAssembly(RegexCompilationInfo[], AssemblyName) yöntemi, derlenmiş normal ifadelerin derlemesini oluşturan ayrı bir uygulamadan çağrılır. Derlemeye dahil edilen her normal ifade aşağıdaki özelliklere sahiptir:

  • Regex sınıfından türetilir.

  • Buna, karşılık gelen RegexCompilationInfo nesnesinin fullnamespace ve name parametreleri tarafından tanımlanan tam ad atanır.

  • Varsayılan (veya parametresiz) bir oluşturucuya sahiptir.

Normalde, derlenmiş normal ifadenin örneğini oluşturan ve kullanan kod, derlemeyi oluşturan koddan ayrı bir derlemede veya uygulamada bulunur.

Arayanlara Notlar

.NET Framework 4.5 veya onun nokta sürümlerinin yüklü olduğu bir sistemde geliştiriyorsanız, .NET Framework 4'ü hedefler ve derlenmiş normal ifadeler içeren bir derleme oluşturmak için CompileToAssembly(RegexCompilationInfo[], AssemblyName) yöntemini kullanırsınız. .NET Framework 4'e sahip bir sistemde bu derlemedeki normal ifadelerden birini kullanmaya çalışmak bir özel durum oluşturur. Bu sorunu geçici olarak çözmek için aşağıdakilerden birini yapabilirsiniz:

  • Derlenmiş normal ifadeleri içeren derlemeyi, sonraki sürümler yerine .NET Framework 4 yüklü bir sistemde oluşturun.

  • CompileToAssembly(RegexCompilationInfo[], AssemblyName) çağırmak ve derlenmiş normal ifadeyi bir derlemeden almak yerine, bir Regex nesnesi örneği oluştururken veya normal ifade desen eşleştirme yöntemini çağırırken Compiled seçeneğiyle statik veya örnek Regex yöntemleri kullanın.

Ayrıca bkz.

  • derleme ve yeniden kullanma

Şunlara uygulanır

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

Kaynak:
Regex.cs
Kaynak:
Regex.cs
Kaynak:
Regex.cs

Dikkat

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

Belirtilen özniteliklere sahip adlandırılmış bir derlemeye bir veya daha fazla belirtilen Regex nesnesi derler.

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

Parametreler

regexinfos
RegexCompilationInfo[]

Derlenecek normal ifadeleri açıklayan bir dizi.

assemblyname
AssemblyName

Derlemenin dosya adı.

attributes
CustomAttributeBuilder[]

Derlemeye uygulanacak öznitelikleri tanımlayan bir dizi.

Öznitelikler

Özel durumlar

assemblyname parametresinin Name özelliğinin değeri boş veya null bir dizedir.

-veya-

regexinfos'daki bir veya daha fazla nesnenin normal ifade deseni geçersiz söz dizimi içeriyor.

assemblyname veya regexinfosnull.

Yalnızca .NET Core ve .NET 5+ : Derlenmiş normal ifadeler derlemesi oluşturma desteklenmez.

Örnekler

Aşağıdaki örnek, RegexLib.dll adlı bir derleme oluşturur ve buna AssemblyTitleAttribute özniteliğini uygular. Derleme iki derlenmiş normal ifade içerir. İlk Utilities.RegularExpressions.DuplicatedString, birbirinin aynı olan iki bitişik sözcükle eşleşir. İkinci Utilities.RegularExpressions.EmailAddress, bir dizenin e-posta adresi olarak doğru biçime sahip olup olmadığını denetler.

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

bildirimlerini ILDasm gibi bir yansıma yardımcı programıyla inceleyerek AssemblyTitleAttribute özniteliğinin derlemeye uygulandığını doğrulayabilirsiniz.

Yinelenen sözcükler için bir dizeyi denetleen normal ifade örneği oluşturulur ve aşağıdaki örnek tarafından kullanılır.

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

Bu ikinci örneğin başarılı bir şekilde derlenmesi için projeye eklenecek RegexLib.dll (ilk örnek tarafından oluşturulan derleme) başvurusu gerekir.

Açıklamalar

CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) yöntemi, regexinfos dizisinde tanımlanan her normal ifadenin bir sınıf tarafından temsilildiği bir .NET Framework derlemesi oluşturur. Genellikle CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) yöntemi, derlenmiş normal ifadelerin derlemesini oluşturan ayrı bir uygulamadan çağrılır. Derlemeye dahil edilen her normal ifade aşağıdaki özelliklere sahiptir:

  • Regex sınıfından türetilir.

  • Buna, karşılık gelen RegexCompilationInfo nesnesinin fullnamespace ve name parametreleri tarafından tanımlanan tam ad atanır.

  • Varsayılan (veya parametresiz) bir oluşturucuya sahiptir.

Normalde, derlenmiş normal ifadenin örneğini oluşturan ve kullanan kod, derlemeyi oluşturan koddan ayrı bir derlemede veya uygulamada bulunur.

CompileToAssembly yöntemi, belirli bir dilin sınıf tanımı anahtar sözcüğünü kullanmak yerine yöntem çağrısından bir .NET Framework derlemesi oluşturduğundan (C# dilinde class veya Visual Basic'te Class...End Class), geliştirme dilinin standart öznitelik söz dizimini kullanarak .NET Framework özniteliklerinin derlemeye atanmasına izin vermez. attributes parametresi, derlemeye uygulanan öznitelikleri tanımlamak için alternatif bir yöntem sağlar. Derlemeye uygulamak istediğiniz her öznitelik için aşağıdakileri yapın:

  1. Çağırmak istediğiniz öznitelik oluşturucusunun parametre türlerini temsil eden bir Type nesnesi dizisi oluşturun.

  2. Yeni derlemeye uygulamak istediğiniz öznitelik sınıfını temsil eden bir Type nesnesi alın.

  3. Çağırmak istediğiniz öznitelik oluşturucuyu temsil eden bir ConstructorInfo nesnesi almak için öznitelik Type nesnesinin GetConstructor yöntemini çağırın. GetConstructor yöntemini oluşturucunun parametre türlerini temsil eden Type nesneleri dizisini geçirin.

  4. Özniteliğin oluşturucusna geçirecek parametreleri tanımlayan bir Object dizisi oluşturun.

  5. 3. adımda alınan ConstructorInfo nesnesini oluşturucusunu ve 4. adımda oluşturulan Object dizisini geçirerek bir CustomAttributeBuilder nesnesinin örneğini oluşturma.

Daha sonra attributes parametresi yerine bu CustomAttributeBuilder nesnelerin bir dizisini Regex.CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) yöntemine geçirebilirsiniz.

Arayanlara Notlar

.NET Framework 4.5 veya onun nokta sürümlerinin yüklü olduğu bir sistemde geliştiriyorsanız, .NET Framework 4'ü hedefler ve derlenmiş normal ifadeler içeren bir derleme oluşturmak için CompileToAssembly(RegexCompilationInfo[], AssemblyName) yöntemini kullanırsınız. .NET Framework 4'e sahip bir sistemde bu derlemedeki normal ifadelerden birini kullanmaya çalışmak bir özel durum oluşturur. Bu sorunu geçici olarak çözmek için aşağıdakilerden birini yapabilirsiniz:

  • Derlenmiş normal ifadeleri içeren derlemeyi, sonraki sürümler yerine .NET Framework 4 yüklü bir sistemde oluşturun.

  • CompileToAssembly(RegexCompilationInfo[], AssemblyName) çağırmak ve derlenmiş normal ifadeyi bir derlemeden almak yerine, bir Regex nesnesi örneği oluştururken veya normal ifade desen eşleştirme yöntemini çağırırken Compiled seçeneğiyle statik veya örnek Regex yöntemleri kullanın.

Ayrıca bkz.

  • derleme ve yeniden kullanma

Şunlara uygulanır