Как передать параметры во время выполнения компиляции в C #, Winforms? - PullRequest
0 голосов
/ 14 апреля 2011

Я застрял на компиляции во время выполнения и 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);

    }

Отлично работает и загружает форму теста.

Но! Мне нужно передать параметр в эту форму теста (список элементов управления Panel), чтобы заполнить форму.

Как я могу это сделать? Может быть, я смотрю в неправильном направлении, и это нужно сделать по-другому? Большое спасибо заранее!

EDIT В конце концов, я отказался от CodeDom и вместо этого использовал Mono.Cecil , внедряя файл .exe с информацией из моей основной программы.

1 Ответ

2 голосов
/ 14 апреля 2011

Что вы делаете, это компилируете исполняемую сборку, а затем запускаете ее в другом процессе.

Если вы хотите передать эту информацию, аргументы командной строки - это одна опция . Однако передача объекта .Net в командной строке не будет работать.

Если вы хотите передать что-то управляемое, вам придется использовать вашу новую сборку с некоторым поздним связыванием и, возможно, передать свой объект конструктору, скорее всего, зависит от того, какой код компилируемый принимает, если у вас есть что во время разработки ...

Вы переписываете Visual Studio?

...