【问题标题】:CSharpCodeProvider set and verify .NET profile versionCSharpCodeProvider 设置和验证 .NET 配置文件版本
【发布时间】:2012-11-18 09:06:09
【问题描述】:

我在我的应用程序中使用单声道作为嵌入式脚本环境。对于脚本的编译,我使用 Microsoft.CSharp.CSharpCodeProvider。现在我需要一些 4.0 或 4.5 功能,例如 System.Numerics。但是,在编译器选项中引用 System.Numerics.dll 只会让我出错

(0,0):错误 CS0006:找不到元数据文件“System.Numerics.dll”

由于提供程序的装配位置指向 2.0.0.0 gac,因此看到此失败我并不感到惊讶。但是,有了 mono-2.11.4 以及 v4.0 和 v4.5 配置文件,我想知道为什么提供者没有找到所需的程序集,或者它是否甚至按要求提供了 v4.0。

var provider_options = new Dictionary<string,string>();
provider_options.Add("CompilerVersion", "v4.0");
CodeDomProvider provider = new CSharpCodeProvider(provider_options);
CompilerParameters cparams = new CompilerParameters ();
cparams.GenerateExecutable = true;
cparams.OutputAssembly = Path.ChangeExtension(rFileNames[0],".exe");
cparams.ReferencedAssemblies.Add( "System.dll" );
cparams.ReferencedAssemblies.Add( "System.Windows.Forms.dll" );
cparams.ReferencedAssemblies.Add( "System.Drawing.dll" );
cparams.ReferencedAssemblies.Add( "Mono.Debugger.Soft.dll" ); 
cparams.ReferencedAssemblies.Add( "System.Numerics.dll" );

【问题讨论】:

  • 您请求的是 compiler 版本 4.0 - 这在某种程度上独立于您正在使用的 framework。您正在编译和运行 this 代码的框架版本是什么?
  • 我确实使用带有选项 -sdk:4 的 dmcs 进行编译
  • 对不起,我很笨。现在终于在花了几天时间摸索和尝试之后,我注意到我只需要为 mono jit 强制执行 v4.0 引擎( mDomain = mono_jit_init_version ("Root Domain","v4.0");) ...掌心。
  • 请发布您的解决方案作为答案。

标签: .net c#-4.0 mono csharpcodeprovider


【解决方案1】:

根据 Jon 的评论,我正在考虑执行框架。尽管页面embedding mono 声明mono_jit_init (domain_name);

"... 将返回执行代码的 MonoDomain。domain_name 是主应用程序域的名称。此调用将初始化默认框架版本,可能是 2.0 或 4.0,具体取决于所使用的 Mono 版本。”

它不会为单声道 2.11.4 返回 .net 4.0 域,尽管我很想相信这一点。 通过调用 mono_jit_init_version ("myapp", ""v4.0); 来强制执行该版本可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多