5

CSharpCodeProviderC#と CodeDomを使用して、実行時に C# コードをコンパイルできることはわかっています。

Javaもコンパイルできますか?そうでない場合、代替手段はありますか?

アプリケーションで C# および Java コードをコンパイルできるようにしたいと考えています。

4

3 に答える 3

2
  • コンパイルを実行するシステムに JDK (または同等のものがインストールされている) が必要です。

  • Javaコンパイラを呼び出す必要があります

  • おそらく、Java ランタイム (または同等のもの) を使用してコンパイルされたコードを使用する必要があります。

方法 A:Process.Start Kieren の回答で述べたように 、コンパイラとコンパイル済みコードの両方を使用する最も簡単な方法はトラフです。必要なコンポーネントがあれば、これは簡単です。

//add this either atusing System.Diagnostics;

static void CompileJava(string javacPathName, string javaFilePathName, string commandLineOptions = "")
{
    var startInfo = new ProcessStartInfo();    
    startInfo.CreateNoWindow = true;      
    startInfo.UseShellExecute = false;   
    startInfo.FileName = javacPathName;   
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;  
    startInfo.Arguments = commandLineOptions + " " + javaFilePathName;

    try {
        using (var javacProcess = Process.Start(startInfo))
        {
            javacProcess.WaitForExit();
        }
   } 
   catch(Exception e)
   {
       // do something e.g. throw a more appropriate exception
   }

}

方法 B: より深い統合が必要な場合は、ネイティブ リンク方法を試すことができます (つまり、.NET と Java ネイティブ インターフェイスを使用して、外部プロセスを呼び出さずに相互運用することができます)。前提条件は方法 A と同じです。必要な投資ははるかに高くなります。これは、方法 A では満たすことができない特定のパフォーマンスまたはその他の制約がある場合にのみ考慮する必要があります。

以下のリンクをたどると、いくつかの情報を見つけることができます。

C# 側から: http://blogs.msdn.com/b/texblog/archive/2007/04/05/linking-native-c-into-c-applications.aspx

Java 側から: http://docs.oracle.com/javase/6/docs/technotes/guides/jni/

于 2012-12-01T15:39:37.877 に答える
1

driis と ppeterka が言っていることをさらに詳しく説明すると、Java は .NET 言語ではない (J# は近かったが、もう存在しない) ため、組み込みの方法はありません。Process.StartJavaコンパイラを起動するために使用する必要があります。

于 2012-12-01T15:31:27.593 に答える
0

特定の状況ではそれが必要になる場合がありますが、Java はこのために構築されておらず、実行時ではなくコンパイル時にコンパイルされるように構築されています。Miltiadis Kokkonidis の答えは機能しますが、問題に適した別の言語を使用するか、目前の状況に合わせて言語の強みを使用するのがおそらく最善です。

于 2012-12-01T16:12:09.213 に答える