ROWLEX просто стал открытым исходным кодом, так что теперь у вас есть возможность на самом деле заглянуть внутрь кода OwlGrinder.exe и скопировать код оттуда. Однако вот короткий пример:
private NC3A.SI.Rowlex.AssemblyGenerator generator;
private void RunAssemblyGeneration(XmlDocument ontologyFileInRdfXml)
{
this.generator = new NC3A.SI.Rowlex.AssemblyGenerator();
this.generator.GenerateAsync(ontologyFileInRdfXml, "myAssemblyName",
null, this.OnGenerationFinished);
}
private void OnGenerationFinished(string errorMessage)
{
if (errorMessage == null)
{
// Success
// Displaying warnings and saving result
string[] warnings = this.generator.Warnings;
this.generator.SaveResult(@"C:\myAssemblyName.dll");
// Important! One generator instance can be executed only once.
this.generator = null;
this.RejoiceOverSuccess();
}
else
{
// Failure
this.MournOverFailure();
}
}
Если вы хотите создавать сборки во время выполнения, я предполагаю, что вы, возможно, захотите повторять это снова и снова, как того требует ваш пользователь. Вы должны остерегаться здесь, потому что .NET не позволяет вам выгружать сборку. Поэтому вы не можете избавиться от сборок из ваших предыдущих запусков. Решение состоит в том, что вы каждый раз выполняете код генерации в новом домене приложений, который можно выгрузить. OwlGrinder.exe делает именно это, вы можете захотеть достичь максимума внутри MainForm.cs