0

アプリケーションの組み込みスクリプト環境に mono を使用しています。スクリプトのコンパイルには、Microsoft.CSharp.CSharpCodeProvider を使用します。現在、System.Numerics のような 4.0 または 4.5 の機能が必要です。ただし、コンパイラ オプションで 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" );
4

1 に答える 1

0

Jon のコメントに続いて、実行フレームワークについて考えていました。モノを埋め込むページには次のように記載されていますが、mono_jit_init (domain_name);

「... コードが実行される MonoDomain を返します。domain_name は、メイン アプリケーション ドメインの名前です。この呼び出しは、使用される Mono バージョンに応じて、デフォルトのフレームワーク バージョンを 2.0 または 4.0 に初期化します。」

私はこれを信じたくなりましたが、mono 2.11.4 の .net 4.0 ドメインを返しません。呼び出しによるバージョンの強制は正常にmono_jit_init_version ("myapp", ""v4.0);機能します。

于 2012-11-21T20:08:13.337 に答える