Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
7.0'den önce Orleans, kaynak oluşturma daha fazla elle yapılırdı ve açık geliştirici müdahalesi gerektiriyordu. 7.0'dan Orleans itibaren kod oluşturma otomatiktir ve genellikle müdahale gerektirmez. Ancak, kod oluşturmanın etkilenmesinin istendiği durumlar hâlâ bulunmaktadır; örneğin, otomatik olarak oluşturulmayan türler için veya farklı bir derlemedeki türler için kod oluşturmak istenebilir.
Kod oluşturmayı etkinleştirme
Orleans derleme zamanında uygulama için C# kaynak kodu oluşturur. Ana bilgisayar da dahil olmak üzere tüm projelerin kod oluşturmayı etkinleştirmek için uygun NuGet paketlerinin yüklü olması gerekir. Aşağıdaki paketler kullanılabilir:
- Tüm istemciler Microsoft'a başvurmalıdır ..Orleans. İstemci.
- Tüm silolar (sunucular) Microsoft'a başvurmalıdır ..Orleans. Sunucu.
- Diğer tüm paketler Microsoft'a başvurmalıdır ..Orleans. Sdk.
GenerateSerializerAttribute türün serileştirmeye yönelik olduğunu belirtmek ve Orleans için serileştirme kodu oluşturması gerektiğini göstermek amacıyla kullanın. Daha fazla bilgi için bkzOrleans kullanma.
Çalışma Orleans zamanı, küme genelinde kullanılan türlerin düzgün seri hale getirilmesini sağlamak ve şablon kod oluşturmak için üretilen kodu kullanır. Bu yapı, yöntem yönlendirme, istisna iletimi ve diğer iç çalışma zamanı kavramlarının uygulama ayrıntılarını soyutlar. Kod oluşturma, proje oluştururken veya uygulama başlatıldığında gerçekleştirilebilir.
Derleme zamanı kodu oluşturma
Derleme zamanında, Orleans, GenerateSerializerAttribute ile işaretlenmiş tüm türler için kod oluşturur. Bir tür GenerateSerializerAttribute ile işaretlenmemişse, Orleans onu seri hale getirmez.
F# veya Visual Basic ile geliştirme gerçekleştiriliyorsa kod oluşturma da kullanılabilir. Daha fazla bilgi için şu örneklere bakın:
Bu örnekler, kaynak oluşturucunun türleri inceleyip kaynak kod üretmesi için derlemedeki türlerin Orleans.GenerateCodeForDeclaringAssemblyAttribute belirtilmesini kullanarak gösterir.
Kod oluşturma için tercih edilen yöntem derleme zamanındadır. Aşağıdaki paketlerden birini kullanarak derleme zamanı kod oluşturmayı etkinleştirin:
-
Microsoft.Orleans.OrleansCodeGenerator.Build: Kod oluşturma için Roslyn'i ve analiz için .NET Yansımasını kullanan bir paket. -
Microsoft.Orleans.CodeGenerator.MSBuild: Hem kod oluşturma hem de analiz için Roslyn'i kullanarak daha yeni bir kod oluşturma paketi. Bağımlılık sürümleriyle farklı hedef çerçevelerin çakışmasından kaynaklanan sorunlardan kaçınarak uygulama ikili dosyalarını yüklemez. Bu kod oluşturucu artımlı derlemelere yönelik desteği de geliştirerek daha kısa derleme sürelerine neden olur.
Bu paketlerden birini tanecikler, tane arabirimleri, özel serileştiriciler veya taneler arasında gönderilen türleri içeren tüm projelere yükleyin. Paket yükleme, derleme zamanında kod oluşturan projeye bir hedef ekler.
Her iki paket de (Microsoft.Orleans.CodeGenerator.MSBuild ve Microsoft.Orleans.OrleansCodeGenerator.Build) yalnızca C# projelerini destekler. Paketi kullanarak Microsoft.Orleans.OrleansCodeGenerator (aşağıda açıklanmıştır) veya diğer dillerde yazılmış derlemelerden oluşturulan kod için hedef olarak davranan bir C# projesi oluşturarak diğer dilleri destekleyin.
Hedef projenin OrleansCodeGenLogLevel dosyasında için bir değer belirterek derleme zamanında ek tanılamalar yayımlar. Örneğin: <OrleansCodeGenLogLevel>Trace</OrleansCodeGenLogLevel>.
Başlatma aşamasında kod oluşturma
7+'da Orleans başlatma sırasında hiçbir şey olmaz. Kod oluşturma yalnızca derleme zamanında gerçekleşir.
Paket yüklenip Microsoft.Orleans.OrleansCodeGenerator uzantı yöntemi kullanılarak ApplicationPartManagerCodeGenExtensions.WithCodeGeneration istemcide ve siloda başlatma sırasında kod oluşturma gerçekleştirilebilir:
public static void ConfigureWithCodeGeneration(ISiloHostBuilder builder)
{
builder.ConfigureApplicationParts(
parts => parts
.AddApplicationPart(typeof(IRuntimeCodeGenGrain).Assembly)
.WithCodeGeneration());
}
Önceki örnekte, builder hem ISiloHostBuilder hem de IClientBuilder örneği olabilir. Kod üretimi sırasında günlük kaydını etkinleştirmek için isteğe bağlı bir ILoggerFactory örneği WithCodeGeneration'e geçirin, örneğin:
public static void ConfigureWithCodeGenerationLogging(ISiloHostBuilder builder)
{
ILoggerFactory codeGenLoggerFactory = new LoggerFactory();
codeGenLoggerFactory.AddProvider(new ConsoleLoggerProvider());
builder.ConfigureApplicationParts(
parts => parts
.AddApplicationPart(typeof(IRuntimeCodeGenGrain).Assembly)
.WithCodeGeneration(codeGenLoggerFactory));
}
Etki kodu oluşturma
Bir türe GenerateSerializerAttribute uygulanırken, IdAttribute üyeyi de benzersiz olarak tanımlamak için uygulanabilir. Benzer şekilde, bir diğer ad AliasAttribute kullanılarak uygulanabilir. Kod oluşturmayı etkileme hakkında daha fazla bilgi için bkzOrleans kullanma.
Kod oluşturma sırasında, belirli bir tür için kod oluşturulması etkilenebilir. Orleans tanecik arabirimleri, tanecik sınıfları, tanecik durumu ve tanecik yöntemlerinde bağımsız değişken olarak geçirilen türler için otomatik olarak kod oluşturur. Bir tür bu ölçütlere uymuyorsa, kod oluşturma işlemine daha fazla yol göstermek için aşağıdaki yöntemleri kullanın.
Bir türe SerializableAttribute eklemek, kod oluşturucuya bunun için bir serileştirici oluşturmasını söyler.
Projeye ekleme [assembly: GenerateSerializer(Type)] , kod oluşturucusunun bu türü serileştirilebilir olarak ele alımasını sağlar. Bu tür için seri hale getirici oluşturulamıyorsa (örneğin, tür erişilebilir olmadığından) bir hataya neden olur. Kod oluşturma etkinse bu hata derleme işlemini durdurur. Bu öznitelik, başka bir derlemeden belirli türler için kod oluşturulmasına da olanak tanır.
[assembly: KnownType(Type)] ayrıca kod oluşturucusunun belirli bir türü (başvurulan derlemeden gelebilir) içermesini ister, ancak tür erişilemezse hata oluşturmaz.
Tüm alt türlerde seri hale getiriciler oluşturma
Bir arabirime veya sınıfa eklemek KnownBaseTypeAttribute , kod oluşturucuya bu türden devralan veya uygulayan tüm türler için serileştirme kodu oluşturmasını bildirir.
Başka bir derlemedeki tüm türler için kod oluşturma
Bazen, oluşturulan kod derleme zamanında belirli bir derlemeye eklenemez. Örnek olarak, Orleans başvurulmayan paylaşılan kütüphaneler, C# dışındaki dillerde yazılmış derlemeler ve kaynak kodun mevcut olmadığı derlemeler verilebilir. Bu gibi durumlarda, bu derlemeler için oluşturulan kodu başlatma sırasında başvuruda bulunılan ayrı bir derlemeye yerleştirin.
Bunu bir derleme için etkinleştirmek için:
- C# projesi oluşturun.
-
Microsoft.Orleans.CodeGenerator.MSBuildveyaMicrosoft.Orleans.OrleansCodeGenerator.Buildpaketini yükleyin. - Hedef derlemeye bir başvuru ekleyin.
- C# dosyasının en üst düzeyinde ekleyin
[assembly: KnownAssembly("OtherAssembly")].
, KnownAssemblyAttribute kod oluşturucuya belirtilen derlemeyi incelemesini ve içindeki türler için kod oluşturmasını belirtir. Bu öznitelik bir proje içinde birden çok kez kullanılabilir.
Ardından, başlatma sırasında oluşturulan derlemeyi istemciye/siloya ekleyin:
public static void ConfigureWithExternalAssembly(ISiloHostBuilder builder)
{
var assembly = Assembly.Load("CodeGenAssembly");
builder.ConfigureApplicationParts(
parts => parts.AddApplicationPart(assembly));
}
Önceki örnekte, builder hem ISiloHostBuilder hem de IClientBuilder örneği olabilir.
KnownAssemblyAttribute isteğe bağlı bir özelliğine sahiptir: TreatTypesAsSerializable. Kod oluşturucusunun bu derlemedeki tüm türler serileştirilebilir olarak işaretlenmiş gibi davranmasını bildirmek için bunu true olarak ayarlayın.