[英]How do I pass parameters in run-time compilation in c#, winforms?
我堅持運行時編譯和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表單(一個Panel控件列表)來填充表單。
我怎樣才能做到這一點? 也許,我正朝着錯誤的方向前進,而且必須以不同的方式完成? 非常感謝提前!
編輯最后,我放棄CodeDom並使用Mono.Cecil ,注入.exe文件,包含來自我的主程序的信息。
你正在做的是編譯可執行程序集然后在另一個進程中啟動它。
如果要傳遞信息, 命令行參數是一個選項 。 但是,在命令行上傳遞.Net對象將不起作用。
如果你想傳遞somthing托管,你將不得不使用你的新程序集與一些后期綁定並將你的對象傳遞給構造函數,而不是取決於你編譯的代碼接受,如果你在設計時有...
你在重寫Visual Studio嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.