Regex.CompileToAssembly Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 regexinfos
null
.
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
vename
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:
Çağırmak istediğiniz öznitelik oluşturucusunun parametre türlerini temsil eden bir Type nesnesi dizisi oluşturun.
Yeni derlemeye uygulamak istediğiniz öznitelik sınıfını temsil eden bir Type nesnesi alın.
Ç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
Özniteliğin oluşturucusna geçirecek parametreleri tanımlayan bir Object dizisi oluşturun.
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 regexinfos
null
.
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
vename
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 regexinfos
null
.
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
vename
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:
Çağırmak istediğiniz öznitelik oluşturucusunun parametre türlerini temsil eden bir Type nesnesi dizisi oluşturun.
Yeni derlemeye uygulamak istediğiniz öznitelik sınıfını temsil eden bir Type nesnesi alın.
Ç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.
Özniteliğin oluşturucusna geçirecek parametreleri tanımlayan bir Object dizisi oluşturun.
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