2013-10-29 203 views
0

我试图创建一个Windows窗体应用程序,它可以创建另一个Windows窗体应用程序。但是当我试图用CodeDom在C#代码中编译时出现的错误是一个奇怪的问题。找不到合适的主要方法

'kjpUnityGameLauncherTemplate.RunLauncher' does not have a suitable static Main method 

这有点让我困惑,因为类“RunLauncher”确实有一个主要的方法,用在(http://msdn.microsoft.com/)的网站中描述的默认设置。http://pastebin.com/NU3VYwpv(其具有的主要方法)

代码我使用通过实际编译此:

RunLauncher类。 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

从MSDN的例子中,我假设这是你的第一个C#Windows窗体应用程序? – Goober

+1

向我们展示您生成的源代码或生成Main()方法的代码。 – SLaks

+0

不,窗口窗体应用程序编译新窗口窗体应用程序作为一个新的.exe工程。这就是我在第一个应用程序上单击按钮的部分,使用上面的“编译代码”,并使用新的Main Class作为新应用程序。所以我基本上有2个主类,一个只通过代码影响生成的类。 –

回答

1

要创建一个可执行文件您的代码必须声明一个入口点方法,并且正确设置为在CodeDom中运行。我在上面的例子中没有看到一个声明。下面我位于

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); 
+0

我明白了,但是没有更多的“自动化”编写主要类的方法吗?而不是我不得不写很多的CodeMethodInvokeExpressions。 你有可能,举个例子,用我上面的例子? –

相关问题