- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的应用程序使用 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/
我的应用程序具有脚本功能,我可以使用 CodeDomProvider.CompileAssemblyFromSource 从用户的脚本编译内存中程序集。它类似于 this answer 中的描述。 .
我让 CompileAssemblyFromSource 为只引用我的程序(编译它)使用的程序集的代码工作。它工作得很漂亮。 但是,如果我需要编译带有“using blah;”的代码声明,它将无法找到
我的应用程序使用 CodeDom 从源文件中动态编译一部分 javascript 代码。在 Windows 上,一切正常。但是在 Linux 上运行该应用程序最终会抛出 InvalidOperatio
我的 WCF 应用程序使用在运行时编译的代码来计算报表的某些值。我正在使用 CSharpCodeProvider.CompileAssemblyFromSource 来编译代码。如果客户端(Silve
我不太确定该去哪里。总体目标是能够获取用户脚本,并在 .NET 环境中执行它。如果我不尝试加载自己的程序集,我已经编写了大部分代码并且一切正常。但是,为了安全地让用户访问系统的内部部分,已经创建了一个
我有一些 C# 代码使用 CSharpCodeProvider.CompileAssemblyFromSource 在内存中创建程序集。程序集被垃圾回收后,我的应用程序使用的内存比创建程序集之前多。我
我正在尝试使用基本程序来动态编译和运行 f# 代码。我正在尝试运行以下代码: open System open System.CodeDom.Compiler open Microsoft.FShar
我有一个 C# 应用程序,它在 C:\Users\xxxx\AppData\Local\Temp 生成临时文件。这些临时文件是使用 Microsoft.CSharp.CSharpCodeProvide
跟进 excellent answer ,我想知道使用 dynamic 关键字的 DLR 是否允许以更简洁的方式为生成的程序集编写代码。 例如,上述答案的代码是否可以: using (Microsof
我们最近从旧的 CodeDomProvider 升级到名为 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 的新 Roslyn CodeDomPr
VB代码: Public Module OnlyModule Public Sub OnlyFunction() 'do stuff End Sub End Modul
我是一名优秀的程序员,十分优秀!