【问题标题】:visual studio 2010 c# run-time compilation of winformsvisual studio 2010 c# 运行时编译winforms
【发布时间】:2011-08-02 19:39:29
【问题描述】:

我有以下问题,稍后将尝试描述它。

在我的程序中,可以通过单击按钮将 winform 编译为 .exe。

现在我尝试用 CodeDom 来做,所以在我的程序中我有以下行:

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

其中 codeProvider 是 CodeDomProvider,text 是编译源。

问题是我需要保存为 .exe 的 winform 后面有一个使用其他类和表单的类,并且由于参数“文本”是字符串参数,它必须包含所有这些类,这会导致大量的代码,更不用说大量的错误了。 Here 是我的意思的一个例子。

肯定还有其他方法,问题是,它们是什么?提前致谢!

【问题讨论】:

  • 您要解决的问题是什么?
  • 如果您告诉我们业务需求是什么,我相信我们可以为您的问题找到更好的解决方案。

标签: c# winforms visual-studio-2010 codedom dynamic-compilation


【解决方案1】:

如果您总是使用相同的类集,则值得将这些通用类放在类库中,并从动态编译的代码中引用。

如果它们在每种情况下都相同,则很难看到您期望的改进 - 如果必须编译那么多代码,就必须编译它,并且有那么多代码可能有错误。

【讨论】:

  • 类集是一样的,我会尽量听从你的建议,谢谢!
  • @Jon Skeet 很抱歉回到这个问题,但我又被卡住了。我创建了一个类库,当我从我的主项目中调用它,创建一个对象时,一切都很好。但是如何使用 CodeDom 将它传递给动态编译的代码呢?如何将其添加为从何处编译的源?记住构造函数应该带一个参数,所以它看起来像这样:CodeToCompile.TForm test = new CodeToCompile.TForm(TestElement.PanelsWithTestElements);提前非常感谢!
  • @tube-builder:在传递给 CompileAssemblyFromSource 的 CompilerParameters 中添加引用。我不确定构造函数在哪里涉及您的问题...
  • @Jon Skeet 我添加了这样的参考parameters.ReferencedAssemblies.Add("CodeToCompile.dll"); 也许我无法正确解释,我很抱歉。我需要从我的主项目中创建一个 .exe(一个 winform),并且我必须向这个 .exe 传递一个面板控件列表来填充这个表单。所以我尝试通过CodeDom来实现,目前没有成功。
  • @tube-builder:当您开始一个新流程时,您希望如何传递控件?
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2015-06-30
相关资源
最近更新 更多