我知道可以在运行时使用 C#CSharpCodeProvider
和 CodeDom 编译 c# 代码。
是否也可以编译Java?如果不是,还有其他选择吗?
我希望我的应用程序能够编译 C# 和 Java 代码。
我知道可以在运行时使用 C#CSharpCodeProvider
和 CodeDom 编译 c# 代码。
是否也可以编译Java?如果不是,还有其他选择吗?
我希望我的应用程序能够编译 C# 和 Java 代码。
您需要在执行编译的系统上安装 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/
为了扩展 driis 和 ppeterka 所说的内容,没有内置方法,因为 Java 不是 .NET 语言(J# 很接近但不再存在)。您需要使用Process.Start
来启动 java 编译器。
您的具体情况可能需要它,但 Java 不是为此而构建的,它是在编译时编译的,而不是在运行时编译的。虽然 Miltiadis Kokkonidis 的答案有效,但最好使用更适合您的问题的不同语言,或者针对当前情况使用语言优势,而不是尝试将其压缩以适应它不想去的地方。