私はRDF-sを処理するためにROWLEXライブラリを使用しています。 OwlGrinder.exeと呼ばれるGUIツールで、OWLオントロジからC#ヘルパークラス(正確には.NETアセンブリ)を生成することができます。実行時にプログラム的に同じことをすることができるかどうか誰かが知っているのだろうかと思います。ROWLEXを使用してOWLファイルからアセンブリをプログラムで生成する
答えて
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ではアセンブリをアンロードすることができないため、ここで注意する必要があります。したがって、以前の実行からアセンブリを削除することはできません。解決策は、アンロードできる新しいAppDomainで毎回生成コードを実行することです。 OwlGrinder.exeはこれを正確に実行しますが、MainForm.csをピークにしたい場合があります
はい、ラメ氏は、プログラムで.NETコードを生成できます。
いくつかのオプションがあります。
コードをテキストとして作成します。
アプリ内から任意の.csまたは.vbソースファイルをコンパイルできます。スターター用のMicrosoft.CSharp.CSharpCodeProviderクラスのヘルプを参照してください。プログラムを使用して、埋め込むリソース、生成されたアセンブリを格納する場所、依存関係などを指定して、コンパイラを呼び出します。ここでのシナリオの1つは、template.csファイルを使用してもう少しコードを埋め込み、コンパイルすることです。結果は、そのコードから生じるアセンブリ(必要に応じて.dllまたは.exeまたは.netmodule)です。その後、リフレクションを使用して、そのアセンブリをロードして呼び出すことができます。ドキュメントオブジェクトモデルを使用してコードを作成します。
ここで関連する機能領域は "CodeDom"と呼ばれ、Webページ用のHTML DOMのように機能しますが、ドキュメントオブジェクトモデルを使用して.NETコードを作成する点が異なります。 DOMエレメントを使用して、プログラムでプログラムを構築します。 CodeDOM物の
例:
var class1 = new System.CodeDom.CodeTypeDeclaration(className);
class1.IsClass=true;
class1.TypeAttributes = System.Reflection.TypeAttributes.Public;
class1.Comments.Add(new System.CodeDom.CodeCommentStatement("This class has been programmatically generated"));
// add a constructor to the class
var ctor= new System.CodeDom.CodeConstructor();
ctor.Attributes = System.CodeDom.MemberAttributes.Public;
ctor.Comments.Add(new System.CodeDom.CodeCommentStatement("the null constructor"));
class1.Members.Add(ctor);
// add one statement to the ctor: an assignment
// in code it will look like; _privateField = new Foo();
ctor.Statements.Add(new System.CodeDom.CodeAssignStatement(new System.CodeDom.CodeVariableReferenceExpression("_privateField"), new System.CodeDom.CodeObjectCreateExpression(fooType)));
// include a private field into the class
System.CodeDom.CodeMemberField field1;
field1= new System.CodeDom.CodeMemberField();
field1.Attributes = System.CodeDom.MemberAttributes.Private;
field1.Name= "_privateField";
field1.Type=new System.CodeDom.CodeTypeReference(fooType);
class1.Members.Add(field1);
などなどあなたがように定期的な方法は、コード内の文のすべての種類などを追加することができます。 CodeDomは、言語がサポートしているすべてのものをサポートしています。あなたはlambdasとlinqの式、条件と制御フロー、何でもすることができます。
次に、そのクラスをコンパイルして、ディスクに保存したり、メモリに保存して動的にロードできるアセンブリを作成できます。
- 1. Rowlex:OWLファイルからアセンブリを生成するためにRowlex OwlGrinderを使用する場合、プロパティノードに複数のエンティティの説明
- 2. javaコードを使用してapkファイルをプログラムで生成する方法
- 3. TextTransform.exeを使用してedmxファイルからコードを生成
- 4. System.Addinを使用してメモリにアセンブリが生成される
- 5. OWLアセンブラ生成問題(OWLGrinder)
- 6. XSDファイルを使用してXMLファイルを生成する
- 7. GWTを使用してクライアントからサーバーにOWLデータを転送する
- 8. TFS APIとSSRSを使用してプログラムでレポートを生成
- 9. 生成された.NETアセンブリを生成したアプリケーション内からデバッグする
- 10. ASP.NETでResponse.writeを使用してファイルを生成中にupdateprogressを使用する
- 11. ROWLEX APIを使用してクラスのowlSubClassesを検索しますか?
- 12. シミュレーションを使用してOHLCからティックデータを生成するR
- 13. Javaを使用してプレーンテキストからHTMLを生成する
- 14. (LocBamlを使用して)CSVから衛星アセンブリを生成する際の問題
- 15. クリップボードからのパスを使用してvlcでファイルを再生
- 16. ワイルドカードを使用してアセンブリをGACからロードする方法
- 17. Orcaを使用してインストーラからアセンブリを削除する
- 18. svcutilを使用してクライアントプロキシのxsdファイルを生成する
- 19. Javaを使用してPKCS12ファイルを生成する
- 20. Javaを使用してPRNファイルを生成する
- 21. Rails date_selectを使用してCSVファイルを生成する
- 22. XML設定を使用してHTMLファイルを生成する
- 23. AS3を使用してサンプルswfファイルを生成する方法
- 24. PdfReportを使用して.xlsxファイルを生成する方法
- 25. pre buildイベントでprotogenを使用して.protoファイルからC#ファイルを生成する
- 26. OWLの使用例は何ですか?
- 27. ITextRendererを使用してHTMLからpdfファイルを生成する際にエンコードの問題が発生する
- 28. CSS私はピサを使用してHTMLからPDFファイルを生成ジャンゴ
- 29. tcpdf拡張子を使用してyiiのデータベーステーブルからpdfファイルを生成
- 30. 私はjavaプログラムを使用してxmlからJavaクラスを生成できますか?