0

ランタイム コンパイルと CodeDom に行き詰まっています。これは、私がこれまでに持っているものの簡単な例です。

public static void Testing()
    {
        CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
        string Output = "Out.exe";

        System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();

        parameters.GenerateExecutable = true;
        parameters.OutputAssembly = Output;
        parameters.ReferencedAssemblies.Add("System.dll");
        parameters.ReferencedAssemblies.Add("System.Drawing.Dll");
        parameters.ReferencedAssemblies.Add("System.Windows.Forms.Dll");
        parameters.CompilerOptions = "/t:winexe";

        string[] text = new string[] { @"C:\MyProject\Test.cs", @"C:\MyProject\Test.Designer.cs",
        @"C:\MyProject\Program.cs"};

        CompilerResults results = codeProvider.CompileAssemblyFromFile(parameters, text);

        Process.Start(Output);

    }

これは問題なく動作し、Test フォームをロードします。

しかし!このテスト フォーム (パネル コントロールのリスト) にパラメーターを渡して、フォームに入力する必要があります。

これどうやってするの?たぶん、私は間違った方向を見ているので、別の方法で行う必要がありますか? よろしくお願いします!

EDIT 最後に、CodeDom をあきらめ、代わりに Mono.Cecil を使用、メイン プログラムからの情報を .exe ファイルに挿入しました。

4

1 に答える 1

2

あなたがしているのは、実行可能なアセンブリをコンパイルしてから、別のプロセスで開始することです。

情報を渡したい場合、コマンドライン引数は 1 つのオプションです。ただし、コマンド ラインで .Net オブジェクトを渡すことはできません。

管理されたものを渡したい場合は、新しいアセンブリを使用して遅延バインディングを使用し、おそらくオブジェクトをコンストラクターに渡す必要があります。設計時にそれがある場合は、コンパイルしているコードが受け入れるものに依存します...

Visual Studio を書き直していますか?

于 2011-04-14T12:57:50.270 に答える