我正在尝试创建一个Windows窗体应用程序,它可以创建另一个Windows窗体应用程序。但是当我尝试使用c#代码中的CodeDom进行编译时,我得到的错误是一个奇怪的错误。
'kjpUnityGameLauncherTemplate.RunLauncher' does not have a suitable static Main method
这种方式让我感到困惑,因为“RunLauncher”类有一个主方法,在(http://msdn.microsoft.com/)网站上描述了默认设置。
RunLauncher类: http://pastebin.com/NU3VYwpv(有主要方法)
我用来实际编译这个代码的代码。 CodeDom是这样的:
if (codeProvider.Supports(GeneratorSupport.EntryPointMethod))
{
parameters.MainClass = "kjpUnityGameLauncherTemplate.RunLauncher";
}
CodeCompileUnit compileUnits = new CodeCompileUnit();
CodeNamespace nsp = new CodeNamespace("kjpUnityGameLauncherTemplate");
parameters.CompilerOptions = "/main:kjpUnityGameLauncherTemplate.RunLauncher";
CodeTypeDeclaration class1 = new CodeTypeDeclaration("RunLauncher");
nsp.Types.Add(class1);
CodeTypeDeclaration class2 = new CodeTypeDeclaration("kjpUnityGameLauncher");
nsp.Types.Add(class2);
CodeTypeDeclaration class3 = new CodeTypeDeclaration("Launcher");
nsp.Types.Add(class3);
nsp.Imports.Add(new CodeNamespaceImport("kjpUnityGameLauncherTemplate"));
compileUnits.Namespaces.Add(nsp);
CompilerResults results = icc.CompileAssemblyFromDom(parameters, compileUnits);
还有一些其他的东西,如声明变量“codeProvider”等,但在这种情况下这些不是问题,这就是为什么我没有包含它们。
答案 0 :(得分:1)
创建可执行文件您的代码必须正确声明入口点方法并且设置才能在CodeDom中运行。我在上面的例子中没有看到一个声明。下面我有一个位于
的MSDN的例子http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx
CodeEntryPointMethod start = new CodeEntryPointMethod();
CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(
new CodeTypeReferenceExpression("System.Console"),
"WriteLine", new CodePrimitiveExpression("Hello World!"));
start.Statements.Add(cs1);