CSharpCodeProvider 设置并验证 .NET 配置文件版本



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

(0,0):错误 CS0006:找不到元数据文件"系统数字.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" );

在Jon的评论之后,我正在考虑执行框架。尽管嵌入单声道的页面声明mono_jit_init (domain_name);

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

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

相关内容

  • 没有找到相关文章

最新更新