gpt4 book ai didi

c# - CodeDom.CompileAssemblyFromSource 抛出奇怪的错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:00:44 24 4
gpt4 key购买 nike

我的应用程序使用 CodeDom 从源文件中动态编译一部分 javascript 代码。在 Windows 上,一切正常。但是在 Linux 上运行该应用程序最终会抛出 InvalidOperationException,它没有提供任何有用的调试信息。造成这种情况的根本原因是什么?

我在 Debian Jessie 上用 Mono 4.0.x 测试了这个应用

private JScriptCodeProvider compiler = new JScriptCodeProvider();
private CompilerParameters parameters = new CompilerParameters();

参数:

parameters.ReferencedAssemblies.Add("System.dll");
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;

编译:

// This line throws InvalidOperationException
var result = compiler.CompileAssemblyFromSource(parameters, scriptCode);

跟踪信息:

e   
{System.InvalidOperationException: Process has not been started.
at System.Diagnostics.Process.get_ExitCode () [0x00015] in <filename
unknown>:0

at (wrapper remoting-invoke-with-check)
System.Diagnostics.Process:get_ExitCode ()

at System.CodeDom.Compiler.Executor.InternalExecWaitWithCapture
(System.String cmd, System.String currentDir,
System.CodeDom.Compiler.TempFileCollection tempFiles, System.String&
outputName, System.String& errorName) [0x000f1] in <filename
unknown>:0

at System.CodeDom.Compiler.Executor.ExecWaitWithCapture
(System.String cmd, System.CodeDom.Compiler.TempFileCollection
tempFiles, System.String& outputName, System.String& errorName)
[0x00006] in <filename unknown>:0

at System.CodeDom.Compiler.CodeCompiler.Compile
(System.CodeDom.Compiler.CompilerParameters options, System.String[]
fileNames, Boolean keepFiles) [0x0009c] in <filename unknown>:0

at System.CodeDom.Compiler.CodeCompiler.FromSourceBatch
(System.CodeDom.Compiler.CompilerParameters options, System.String[]
sources) [0x0006b] in <filename unknown>:0

at System.CodeDom.Compiler.CodeCompiler.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch
(System.CodeDom.Compiler.CompilerParameters options, System.String[]
sources) [0x00000] in <filename unknown>:0

at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource
(System.CodeDom.Compiler.CompilerParameters options, System.String[]
sources) [0x00014] in <filename unknown>:0

at ***.ScriptEngine.compile () [0x00036] in
***ScriptEngine.cs:139 }
System.InvalidOperationException

最佳答案

Codedom 在 Linux 上有点奇怪。它的实现方式与在 Windows 上的实现方式不同,即使它完全实现了也是如此。如果你打算做一个跨平台的应用程序,我会建议 Mono 的 compiler as a service , 或 CS-Script's更友好的实现。编译器即服务没有很好的文档记录,并且与 Microsoft 的运行时编译器不同。 CS-Script 是 Microsoft 和 Mono 的运行时编译器的包装器,它有详细的文档和直接的说明。

关于c# - CodeDom.CompileAssemblyFromSource 抛出奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com